我试图使用 long 为货币创建自己的类,但显然我应该使用 BigDecimal
代替。有人可以帮我开始吗?将 BigDecimal
s 用于美元货币的最佳方式是什么,例如至少但不超过 2 位美分等。BigDecimal
的 API很大,不知道用什么方法。另外,BigDecimal
具有更好的精度,但是如果它通过 double
不是全部丢失了吗?如果我执行 new BigDecimal(24.99)
,它与使用 double
有何不同?还是应该改用使用 String
的构造函数?
最佳答案
这里有一些提示:
- 如果您需要它提供的精度,请使用
BigDecimal
进行计算(货币值(value)通常需要这个)。 - 使用
NumberFormat
展示类。本类(class)将处理不同货币金额的本地化问题。但是,它只接受原语;因此,如果您可以接受由于转换为double
而导致的准确性的微小变化,则可以使用此类。 - 使用
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
实例
您可以使用 setMinimumFractionDigits
和 setMaximumFractionDigits
方法调用来限制显示的数据量。
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/