你能复制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);
即1024
和100
给出10.24
– > 10
– > 1000
。