gpt4 book ai didi

java - BigDecimal round : doubleValue() vs setScale(2, BigDecimal.ROUND_HALF_UP) 价格值

转载 作者:行者123 更新时间:2023-11-30 10:39:28 30 4
gpt4 key购买 nike

我一直在使用 BigDecimal 来获取价格,但我想知道向用户展示它的最佳方式是什么。

  • 使用 doubleValue() 是一种好方法吗?
  • 这两个选项之间有什么区别吗?

最佳答案

Is using doubleValue() a good way?

如果您想避免使用 double(或者您想控制数字的格式),使用 BigDecimal 是有意义的。如果您混合使用 BigDecimaldouble 我不明白这一点。您也可以一直使用 double 并简化您的代码。

如果你想把值变成一个字符串,使用toString例如

BigDecimal bd = ...
System.out.println("bd: " + bd.toString());

或者只是

System.out.println("bd: " + bd);

如果你想使用double,你可以这样做

double d = 
System.out.printf("%.2f%n", d); // round to 2 decimal places

一个例子说明为什么 BigDecimal 比 double 更容易出错。这两个答案都是错误的,但在 BigDecimal 的情况下,它并不明显,无论是在代码中还是在看起来不错的结果中

System.out.println(BigDecimal.valueOf(1.00)
.divide(BigDecimal.valueOf(49), 2, BigDecimal.ROUND_HALF_UP)
.multiply(BigDecimal.valueOf(49)));
System.out.println(1.00 / 49 * 49);

打印

0.98
0.9999999999999999

您可以修复这两种代码,但第一种情况存在问题的事实很容易被忽略。提示:使用 BigDecimal.valueOf 不是问题。代码越冗长(使用的符号越多),就越难看到重要的细节。

关于java - BigDecimal round : doubleValue() vs setScale(2, BigDecimal.ROUND_HALF_UP) 价格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287506/

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