- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这个话题已经被广泛讨论了。但当我阅读 BigDecimal 主题的答案时,我感到困惑。我希望你不要因为我开始这个话题而生气。
我正在创建一个程序来对几个数字进行非常简单的除法。我有两个代表金额的变量。变量和答案的精度是零后 5 位数字 (x.xxxxx)。我希望我的答案尽可能精确(零后仍为 5 位数字,但四舍五入精确)。
这是我的示例代码:
public static void main(String[] args) {
double a =1.0;
double b =3.0;
double c;
c=(double)Math.round((a/b)*100000)/100000;
System.out.println(c); //prints 0.33333
BigDecimal d= new BigDecimal("1.0");
BigDecimal e = new BigDecimal("3.0");
BigDecimal f;
f=d.divide(e, 5, RoundingMode.HALF_DOWN);
System.out.println(f);//prints 0.33333
BigDecimal k = new BigDecimal(1.0);
BigDecimal l = new BigDecimal(3.0);
BigDecimal m;
m=k.divide(l, 5, RoundingMode.HALF_DOWN);
System.out.println(m);//prints 0.33333
BigDecimal o= new BigDecimal("1.0");
BigDecimal p = new BigDecimal("3.0");
BigDecimal q;
q=o.divide(p, 5, RoundingMode.HALF_UP);
System.out.println(q);//prints 0.33333
}
问题 1:为什么 RoundingMode.HALF_DOWN 给出与 RoundingMode.HALF_UP 相同的答案。其中之一不应该给出 0.33334 吗?问题 2:当我比较除以两个 double 并强制舍入它们与使用 BigDecimal HALF_DOWN 时,在哪种情况下精度存在差异。问题 3:当我使用 string 和 double 的 bigdecimal 构造函数时,不应该有什么区别吗?什么情况下有区别?问题4:您建议在计算金钱时采用哪种方法,为什么?
谢谢。 :)
最佳答案
当你将 1.0 除以 3.0 时,结果是 0.333333333...如果你阅读规范,你会发现 ROUND_HALF_UP 和 ROUND_HALF_DOWN 仅在丢弃的分数恰好为 0.5 时才会产生不同的结果,否则它们的行为相同。所以您看到了人们所期望的。
如果您要对具有任何实际意义的资金进行计算(生成财务报告、计算销售税等),那么您需要了解您的情况在法律上预期的舍入模式。不要成为牛仔。
关于java 双除法与 BigDecimal 轮 half_up half_down,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23581083/
我知道这个话题已经被广泛讨论了。但当我阅读 BigDecimal 主题的答案时,我感到困惑。我希望你不要因为我开始这个话题而生气。 我正在创建一个程序来对几个数字进行非常简单的除法。我有两个代表金额的
我正在使用 jdk 1.8.0_45,我们的测试发现了路由中的错误。当决定四舍五入的最后一位小数为 5 时,RoundingMode.HALF_DOWN 与 RoundingMode.HALF_UP
例如:如果值来自像 4.8 这样的服务器,我想显示像 4.5 这样的评分。如果服务器值为 5 并且我必须显示评级 5 就可以了。 我尝试了什么? 我尝试了一些本地方法,比如 BigDecimal(li
我是一名优秀的程序员,十分优秀!