【问题标题】:How can I impose decimalFormat on the result of a method?如何对方法的结果强加十进制格式?
【发布时间】:2013-04-17 19:46:42
【问题描述】:

我有这个代码:

public double theInterest(){     
        return (accountBalance*i) +accountBalance; 

我的问题是,有没有一种方法可以将 DecimalFormat 强加到等式的结果中,使其最多显示 2 位小数?

非常感谢任何帮助。

【问题讨论】:

  • 正如 HFOE 提示的那样,您需要了解 数值 和该值的表示形式 之间的区别。 double 是一种表示 的方式,它没有固有的视觉格式。如果您执行System.out.println(someDouble);,您将获得printlnsomeDouble 选择的“默认”格式——而不是在名为someDouble 中携带的任何格式。要获得不同的格式,您需要使用多种格式化技术之一明确指定所需的格式。
  • (并且“分离格式化技术”的输出(即)将是String,而不是double。)

标签: java decimalformat


【解决方案1】:

您的问题已发布为无法回答,因为该方法返回一个双精度值,而 DecimalFormat 只能返回一个字符串。尝试返回格式化的 double 是没有意义的。我不建议您更改方法,但考虑创建一个单独的方法,例如 getInterestString(),它采用 theInterest() 的结果,并使用您的 DecimalFormatter 对其进行格式化,然后返回此格式化字符串。

即,

public String getInterestString() {
  NumberFormat moneyFormat = NumberFormat.getCurrencyInstance();
  return moneyFormat.format(theInterest();
}

或者更一般地说,

private NumberFormat moneyFormat = NumberFormat.getCurrencyInstance();

public String currencyFormat(double numberValue) {
  moneyFormat.format(numberValue);
}

编辑:正如 svc 所说,您应该努力避免使用浮点数进行货币计算,因为不准确很重要。最好使用 BigDecimal。

【讨论】:

  • 还要补充一点,不鼓励使用double 处理金钱。
  • @svz:阿门! double 太不准确,无法用于实际的货币计算。已编辑答案以反映这一点。
【解决方案2】:

您根本不应该将double 用于财务工作。通常,您使用BigDecimal,其中您的数字按您所在国家/地区的最低货币单位计价:

BigDecimal tenDollars = new BigDecimal(1000L, 2);
// Alternatively, use the BigDecimal(BigInteger, int) constructor.

您可以使用MathContexts 设置舍入模式。在内部,您将 Bi​​gDecimal 存储为您的货币值;只有当您向用户显示时,您才会使用格式转换为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多