我想在Java中格式化具有一定数量小数的double。我的代码目前看起来像这样:
final NumberFormat format = NumberFormat.getInstance();
format.setMinimumFractionDigits(decimalPlaces);
format.setMaximumFractionDigits(decimalPlaces);
format.setGroupingUsed(false);
String s = format.format(value);
但是当decimalPlaces
超过340时,此方法只打印340位数而忽略其余数字。有办法解决这个限制吗?
特别是在我的情况下,它们都是0(并且由于精度不是那么高,可能会在某个点之后使用任何数字)但是我觉得这个函数只是默默地忽略了我想要的而不是扔例外情况。
是的,我知道double实际上并不能保存那么多的小数位,但是int也不能保存任何小数位,但是我可以用它来打印它。 / p>
答案 0 :(得分:3)
setMinimumFractionDigits的文档包含以下声明:
具体子类可以对适合于格式化的数字类型的此值强制执行上限。
NumberFormat.getInstance
返回的子类很可能是DecimalFormat
,它在JavaDocs
对于格式化BigInteger和BigDecimal对象以外的数字,使用newValue和340中的较低者。负输入值替换为0。
因此,要解决您的问题,请在格式化之前将其转换为BigDecimal
。
答案 1 :(得分:0)
如果是双倍,则值会被截断。使用/声明值为BigDecimal
试试这个示例代码:
final NumberFormat format = NumberFormat.getInstance();
format.setMinimumFractionDigits(355);
format.setMaximumFractionDigits(400);
format.setGroupingUsed(false);
System.out.println(format.getMinimumFractionDigits());
BigDecimal bd=new BigDecimal(10L);
String s = format.format(bd);
System.out.println(s.length());
System.out.println(s);