猿问

将数字与分数相乘

我使用BigDecimals编写一些单位转换器,我遇到了一种情况,我必须将一个数字乘以分数 - 周期性数字。

在大多数情况下,精度已经足够好了,但假设我们有一个这样的等式:

BigDecimal.valueOf(90)
          .multiply(BigDecimal.valueOf(10)
                              .divide(BigDecimal.valueOf(90), 6, RoundingMode.HALF_UP))

通常这等于10,但是由于四舍五入,我们将得到9.999999...

有没有一种优雅的方法来实现这一点,而无需有一个if条件来检测何时可以切割分数?


子衿沉夜
浏览 121回答 2
2回答

泛舟湖上清波郎朗

以下方法将起作用:BigDecimal.valueOf(90)     .multiply(BigDecimal.valueOf(10))     .divide(BigDecimal.valueOf(90), 6, RoundingMode.HALF_UP)不同之处在于,这里的操作是链接的,这允许解决这种情况。在解决方案中,需要计算除法(发生错误的地方),然后乘法,因为它是作为参数传递的。

富国沪深

不知道这是否是您的一般情况答案,但它在给定的示例中起作用:bd = BigDecimal.valueOf(90)               .multiply(BigDecimal.valueOf(10))               .divide(BigDecimal.valueOf(90));乘以10,然后除以90。a * x = ax    -   --    z    z您需要为有理数包含一些舍入逻辑:bd = BigDecimal.valueOf(1)               .multiply(BigDecimal.valueOf(1))               .divide(BigDecimal.valueOf(3));如果不舍入,将失败。
随时随地看视频慕课网APP

相关分类

Java
我要回答