gpt4 book ai didi

java - 使用 BigDecimal 处理货币

转载 作者:IT老高 更新时间:2023-10-28 13:52:48 26 4
gpt4 key购买 nike

我试图使用 long 为货币创建自己的类,但显然我应该使用 BigDecimal 代替。有人可以帮我开始吗?将 BigDecimals 用于美元货币的最佳方式是什么,例如至少但不超过 2 位美分等。BigDecimal 的 API很大,不知道用什么方法。另外,BigDecimal 具有更好的精度,但是如果它通过 double 不是全部丢失了吗?如果我执行 new BigDecimal(24.99),它与使用 double 有何不同?还是应该改用使用 String 的构造函数?

最佳答案

这里有一些提示:

  1. 如果您需要它提供的精度,请使用 BigDecimal 进行计算(货币值(value)通常需要这个)。
  2. 使用 NumberFormat展示类。本类(class)将处理不同货币金额的本地化问题。但是,它只接受原语;因此,如果您可以接受由于转换为 double 而导致的准确性的微小变化,则可以使用此类。
  3. 使用 NumberFormat 类时,使用 BigDecimal 实例上的 scale() 方法来设置精度和舍入方法。

PS:如果您想知道,BigDecimal is always better than double, when you have to represent money values in Java .

PPS:

创建 BigDecimal 实例

这很简单,因为 BigDecimal provides constructors to take in primitive values , 和 String 对象。你可以使用那些,preferably the one taking the String object .例如,

BigDecimal modelVal = new BigDecimal("24.455");
BigDecimal displayVal = modelVal.setScale(2, RoundingMode.HALF_EVEN);

显示 BigDecimal 实例

您可以使用 setMinimumFractionDigitssetMaximumFractionDigits 方法调用来限制显示的数据量。

NumberFormat usdCostFormat = NumberFormat.getCurrencyInstance(Locale.US);
usdCostFormat.setMinimumFractionDigits( 1 );
usdCostFormat.setMaximumFractionDigits( 2 );
System.out.println( usdCostFormat.format(displayVal.doubleValue()) );

关于java - 使用 BigDecimal 处理货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359817/

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