gpt4 book ai didi

java - 货币:小数位数意外为零

转载 作者:太空狗 更新时间:2023-10-29 13:35:04 25 4
gpt4 key购买 nike

我正在尝试将货币金额解析并存储为 BigDecimal 值。我得到了相关货币的区域设置,在大多数情况下它工作正常,但当货币是哥斯达黎加科朗时我得到了意想不到的结果。

我的哥斯达黎加客户告诉我,典型的货币金额可能类似于 1.508.534,16,其中 ,16 是小数部分(两位小数).但是,当我调用 Currency.getDefaultFractionDigits() 时,它返回 0 而不是 2 作为小数位数。结果,我正在计算的值被错误地截断了。

代码如下所示:

// currencyLocale is "es_CR"
Currency currency = Currency.getInstance(currencyLocale);
int scale = currency.getDefaultFractionDigits();
// scale is 0 instead of 2

BigDecimal v = new BigDecimal("12.34")
.setScale(scale, BigDecimal.ROUND_HALF_DOWN);
// gives 12 instead of 12.34

请注意,虽然最终用户可见的金额已针对区域设置正确格式化,并使用 , 作为小数点分隔符,但此处的数据源提供的值是标准 1234.56小数额。

我做错了什么?


更新

在做了更多研究之后,reporting the issue to Google ,我现在确信这是一个 Android 错误。谷歌的回应是这按预期工作,因为受影响的货币只能以整数倍数使用(最小的硬币是 5 科朗)。

Google 的回应忽略了一个事实,即由于电汇、利息计算等原因,您的银行账户中可以相当合法地拥有零星金额。

最佳答案

不是真正的答案,但打印出 2(Java JDK,不是 Android):

public static void main(String[] args) {
Locale currencyLocale = new Locale("es","CR");
Currency currency = Currency.getInstance(currencyLocale);
System.out.println(currency.getDefaultFractionDigits());
}

关于java - 货币:小数位数意外为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505461/

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