你能复制Java中Excel中的Floor函数吗?

我搜查了互联网,但没有find任何解决scheme,我的问题。

我希望能够使用相同/复制在Java中的Excel中find的FLOOR函数的types。 特别是我希望能够提供一个值(双倍或最好是BigDecimal),并向下舍入到我提供的重要性的最接近的倍数。

Examples 1: Value = 24,519.30235 Significance = 0.01 Returned Value = 24,519.30 Example 2: Value = 76.81485697 Significance = 1 Returned Value = 76 Example 3: Value = 12,457,854 Significance = 100 Returned Value = 12,457,800 

我对Java很新,想知道是否有人知道API是否已经包含这个函数,或者他们是否会给我一个解决上述问题的方法。 我知道BigDecimal,但我可能错过了正确的function。

非常感谢

是的你可以。

可以说给定的数字是

76.21445和

0.01

你可以做的是将结果乘以76.21445乘以100(或者每0.01除)到最接近的或者更低的整数(取决于你想要的)

并再次乘以数字。

请注意,它可能不会完全打印你想要的,如果你不会去小数精度的数字。 (二进制格式的数字问题在扩展上不是有限的)。 另外在math中,你可以用几乎所有的function来完成你想要的function。

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html你这样使用它

 round(200.3456, 2); 

要四舍五入BigDecimal ,可以使用setScale() 。 在你的情况,你想要RoundingMode.FLOOR

现在您需要确定“显着性”的数字位数。 使用Math.log10(significance) 。 你可能不得不把结果整理一下。

如果结果是否定的,那么您的意义<1。在这种情况下,使用setScale(-result, RoundingMode.FLOOR)四舍五入到N位数。

如果它是> 1,那么使用这个代码:

  value .divide(significance) .setScale(0, RoundingMode.FLOOR) .multiply(significance); 

1024100给出10.24 – > 10 – > 1000