gpt4 book ai didi

java 双除法与 BigDecimal 轮 half_up half_down

转载 作者:行者123 更新时间:2023-12-02 05:50:28 25 4
gpt4 key购买 nike

我知道这个话题已经被广泛讨论了。但当我阅读 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com