为了账号安全,请及时绑定邮箱和手机立即绑定

将数字与分数相乘

将数字与分数相乘

子衿沉夜 2022-09-01 17:26:06
我使用BigDecimals编写一些单位转换器,我遇到了一种情况,我必须将一个数字乘以分数 - 周期性数字。在大多数情况下,精度已经足够好了,但假设我们有一个这样的等式:BigDecimal.valueOf(90)           .multiply(BigDecimal.valueOf(10)                               .divide(BigDecimal.valueOf(90), 6, RoundingMode.HALF_UP))通常这等于10,但是由于四舍五入,我们将得到9.999999...有没有一种优雅的方法来实现这一点,而无需有一个if条件来检测何时可以切割分数?
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

以下方法将起作用:

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

不同之处在于,这里的操作是链接的,这允许解决这种情况。在解决方案中,需要计算除法(发生错误的地方),然后乘法,因为它是作为参数传递的。


查看完整回答
反对 回复 2022-09-01
?
富国沪深

TA贡献1790条经验 获得超9个赞

不知道这是否是您的一般情况答案,但它在给定的示例中起作用:


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));

如果不舍入,将失败。


查看完整回答
反对 回复 2022-09-01
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信