java - 当 BigDecimal 类型先除法再乘法时,为什么结果与预期不同。JAVA
问题描述
问题:当使用 BigDecimal 进行涉及除法的多次计算时。用小数很难理解。
例如:
1/3*3
我们期望是 1
但是当你使用 BigDecimal 时。
我们得到算术异常
如果我为除法添加 roundingMode 。
我们得到 0.9999999999999
float result1 = 1f / 3f * 3f;
BigDecimal one = BigDecimal.valueOf(1);
BigDecimal three = BigDecimal.valueOf(3);
BigDecimal result2 = one.divide(three,64,BigDecimal.ROUND_HALF_UP).multiply(three);
System.out.println(result1);
System.out.println(result2);
输出
1.0
0.9999999999999999999999999999999999999999999999999999999999999999
我知道这个问题与舍入模式有关,但我不知道如何解决这个问题
如果您能帮助提出解决方案,非常感谢。
ps:我的英文不好,应该能看出来,sorry :)
解决方案
推荐阅读
- gcc - 我在编译包含使用 nvcc 编译的 .cu 文件和使用 gcc 编译的 .cpp 文件的代码时遇到问题
- java - 如何根据化学式划分字符串的内容?
- haskell - 是否有任何直接的方法来评估递归函数广度优先?
- java - 通过 HttpsURLConnection (Java) 而不是通过 CURL 连接到 URL 时握手失败?
- ios - 如何使用 Replaykit 在应用程序外部的背景中录制屏幕
- javascript - 在反应应用程序中将数组转换为json
- c - 无法用我认为应该是编译时常量的东西初始化静态数组
- javascript - 使用 javascript 更改图像
- kubernetes - 如何在来自不同 Kubernetes 集群的实例之间进行通信?
- python - Python Gooey 更紧凑的布局