java - 在 Java 的 UI 中显示金钱的正确方法是什么?

标签 java formatting currency

在后端,我将货币值存储在 Money 类中,该类包装了 BigDecimal 并将舍入设置为始终为 Half Even,比例为 8。所有基本操作都正常运行并且按预期运行。但我需要以 2 的比例向用户显示这些值,这给我带来了舍入误差。

例如,我在后端有这些值:

a = 109.11432
b = 9015.57069
c = 9124.68501

它们中的每一个都被格式化为 pt-BR 语言环境:

NumberFormat nf = NumberFormat.getInstance();
nf.setCurrency(Currency.getInstance(new Locale("pt","BR")));
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
String n = nf.format(valor);
return n;

然后我有

a = 109,11
b = 9.015,57
c = 9.124,69

一开始没关系。但是c应该是a + b。使用真实值,这是有保证的,但四舍五入给我一个 0.01 的错误。

处理这种情况的正确方法是什么?

最佳答案

它似乎完全按照您的意愿行事。你存储它的方式,你存储的远远超过 0.01。如果那不是你的意图,那就停止这样做:)

如果你想 a + b 等于 c 有 2 位小数,那么你需要在做加法之前四舍五入。您的问题的解决方案取决于您的应用程序的要求。一种常见的存储货币的方式实际上是使用整数。这样,您就无法存储分数,也永远不会遇到您当前描述的问题。

但这实际上取决于您的要求。您是否需要根据 0.01 或完全准确度进行货币运算,然后对最终结果进行四舍五入?这是一个业务问题,而不是技术问题。

关于java - 在 Java 的 UI 中显示金钱的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409606/

相关文章:

java - 如何解决这个错误: Android resource linking failed?

java - 在 Netbeans Maven 项目中添加 JDBC

Java - toString 格式化(格式化 double )

java - Eclipse 的 Java 格式化程序能否以不同于新 block 的方式缩进换行?

python - 以元组为参数的新样式格式

java - 如何以编程方式在你的安卓应用程序中打开谷歌教室

java - 为父类(super class)分配一个引用java

java - 如何检查Currency.getAvailableCurrency() 是否包含我的字符串值?

objective-c - iPhone 号码文本到完整的货币等式

r - 将带逗号的货币转换为数字