我正在使用 BigDecimals 编写一些单位转换器,并且遇到了一种情况,我必须将一个数字与一个分数 - 周期数相乘。
对于大多数情况,精度足够好,但假设我们有一个等式:
BigDecimal.valueOf(90)
.multiply(BigDecimal.valueOf(10)
.divide(BigDecimal.valueOf(90), 6, RoundingMode.HALF_UP))
通常这等于 10,但是由于四舍五入,我们将得到 9.999999...
是否有一种优雅的方法来实现此目的,而无需使用 if 条件来检测何时可以切割分数?
最佳答案
以下内容将起作用:
BigDecimal.valueOf(90)
.multiply(BigDecimal.valueOf(10))
.divide(BigDecimal.valueOf(90), 6, RoundingMode.HALF_UP)
不同之处在于,这里的操作是链接的,这可以解决此类情况。在您的解决方案中,需要计算除法(发生错误的地方),然后计算乘法,因为它作为参数传递。
关于java - 数字与分数相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328244/