Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 格式双精度到小数点后2位_Java - Fatal编程技术网

Java 格式双精度到小数点后2位

Java 格式双精度到小数点后2位,java,Java,我正在尝试将我的双精度值格式化为精确的小数点后2位,它似乎工作正常,下面是我正在尝试的代码 final NumberFormat df = DecimalFormat.getInstance(); df.setMinimumFractionDigits(2); df.setMaximumFractionDigits(2); df.setRoundingMode(RoundingMode.DOWN); df.format(value) 到目前为止,一切都正常,但我需要返回双倍值,因为它被用于其他

我正在尝试将我的双精度值格式化为精确的小数点后2位,它似乎工作正常,下面是我正在尝试的代码

final NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.DOWN);
df.format(value)
到目前为止,一切都正常,但我需要返回双倍值,因为它被用于其他计算,我尝试了

Double.parseDouble(df.format(value))
用大的十进制

BigDecimal price = new BigDecimal(df.format(number));
但它并没有像预期的那样发挥作用 like
18.50
正在转换为
18.5

虽然这不是计算的问题,但我需要在UI上显示金额,我必须精确显示最多2位小数


在java类中我可以处理它,或者我必须使用JSTL在JSP中处理它。这就是
BigDecimal
的用途

BigDecimal number = new BigDecimal(123.456);
// set 2 fraction digits
// Note that setScale() does not change the original, 
// but returns a new BigDecimal.
number = number.setScale(2, RoundingMode.DOWN);
// get string representation
String text = number.toPlainString();
// get double value
double dbl = number.doubleValue();

如果可以的话,也可以使用
BigDecimal
进行其他计算。

我不明白:您试图打印的内容中有哪些打印不正确?@Vakh:我告诉过您,18.50在转换为双精度输入时返回为18.5。这就是您要找的吗?或者可以将字符串传递给JSP。很难说你想做什么和/或期望什么。@jahroy:我知道JSTL方法,但这意味着在需要显示价格的每个地方添加标签,我希望用java处理这个问题,将字符串发送到jsp就像更改现有的数据类并引入额外的字段。我感到困惑。Java不以其内部格式存储数字。当你说“它没有按预期工作,就像18.50被转换为18.5”时,你指的是它们的
字符串
表示。是否保留尾随零取决于转换方法。如果您不想处理UI中的表示层,则需要传递已格式化的字符串。感谢您的输入,但18.50的doubleValue()将返回18.5,这意味着对于UI显示,我需要另一个输入field@Umesh为什么需要另一个输入字段?double永远不会是18.50。请改用字符串表示法。@Umesh,我同意@martini的观点,用字符串表示。您可以使用更简单的
DecimalFormat.applyPattern(“0.00”)
。@Hiway您没有使用大小数,是吗?toPlainString()是最简单的。