Java 附加0的双精度值

Java 附加0的双精度值,java,floating-point,floating-accuracy,Java,Floating Point,Floating Accuracy,但金额值设置为0.0010 我们在末尾有一个严格的条件,即在存储到DB之前只允许3位小数。但不知何故,它在末尾追加了0 我试过了 Double amount = 0.001 此时,0.001中的格式化字符串是正确的。但如果我再换成双倍 DecimalFormat decimalFormat = new DecimalFormat("#.###"); String formatedString = decimalFormat.format(amount)); 它再次在0.0010末尾添加0

但金额值设置为0.0010

我们在末尾有一个严格的条件,即在存储到DB之前只允许3位小数。但不知何故,它在末尾追加了0

我试过了

Double amount = 0.001
此时,0.001中的格式化字符串是正确的。但如果我再换成双倍

 DecimalFormat decimalFormat = new DecimalFormat("#.###");
 String formatedString = decimalFormat.format(amount));

它再次在0.0010末尾添加0。对于Double类型,默认情况下如何删除末尾的0?

对于Double来说,0.001和0.0010是相同的。如果将其存储在DB中作为double,则一切正常,您应该查看用于显示值的任何程序的格式。

您可以使用类
BigDecimal
根据需要定义刻度和舍入模式。即:

Double.valueOf(decimalFormat.format(formatedString));

不能强制双精度小数点后n位。就这么简单,但是。。。他们是平等的。Double只是Double,它们不是格式化的Double。而且。。。不要在标题上加标签,也不要写大写字母。只是在问题上加上isenough@user202793我的要求是,如果用户输入0.0011,我应该抛出错误,而不是保存。但对于0.001它应该接受。我的要求是,如果用户输入0.0011,它应该抛出错误而不是保存。但是对于0.001,它应该接受。@Manjunath Ok,然后您可以使用问题中的代码(测试它!),但不要担心输出中的尾随零。另一个选择是使用BigDecimal而不是double,并将其限制为小数点后三位。感谢您的帮助!四舍五入。我用过。BigDecimal.valueOf(0.0010).stripTrailingZeros()
BigDecimal val = new BigDecimal("1.12345").setScale(4, RoundingMode.HALF_EVEN);
val.doubleValue();