Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对方法的结果强制使用decimalFormat?_Java_Decimalformat - Fatal编程技术网

Java 如何对方法的结果强制使用decimalFormat?

Java 如何对方法的结果强制使用decimalFormat?,java,decimalformat,Java,Decimalformat,我有以下代码: public double theInterest(){ return (accountBalance*i) +accountBalance; 我的问题是,有没有一种方法可以将DecimalFormat应用于等式的结果,以便它最多显示2位小数 非常感谢您的帮助。您的问题不可回答,因为该方法返回double,而DecimalFormat只能返回字符串。尝试返回一个格式化的double是没有意义的。我不建议你改变这个方法,但是考虑创建一个单独的方法,比如

我有以下代码:

public double theInterest(){     
        return (accountBalance*i) +accountBalance; 
我的问题是,有没有一种方法可以将DecimalFormat应用于等式的结果,以便它最多显示2位小数


非常感谢您的帮助。

您的问题不可回答,因为该方法返回double,而DecimalFormat只能返回字符串。尝试返回一个格式化的double是没有意义的。我不建议你改变这个方法,但是考虑创建一个单独的方法,比如说“代码> GoEntryString())/<代码>,它使用 Tead()/<代码>的结果,并用DeimalFraster来格式化它,然后返回这个格式化的字符串。 i、 e

或者更一般地说

private NumberFormat moneyFormat = NumberFormat.getCurrencyInstance();

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

编辑:正如svc所说,您应该努力避免在货币计算中使用浮点数,因为这是不准确的问题。最好使用BigDecimal。

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

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

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

还要添加的一点是,不鼓励使用
double
来处理金钱。@svz:amen!double太不准确,无法用于实际货币计算。答案经过编辑以反映这一点。正如HFOE所提示的,您需要理解数值和该数值表示形式之间的差异
double
是一种表示值的方法,它不附带任何固有的视觉格式。如果执行
System.out.println(someDouble)
您将获得
println
someDouble
选择的“默认”格式,而不是名为
someDouble
的值中包含的任何格式。要获得不同的格式,您需要使用多种格式技术之一明确指定所需的格式。(并且“单独格式技术”的输出(即值)将是
字符串,而不是
双精度
BigDecimal tenDollars = new BigDecimal(1000L, 2);
// Alternatively, use the BigDecimal(BigInteger, int) constructor.