NumberFormat不喜欢超过340个小数位

时间:2017-03-12 20:52:15

标签: java

我想在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>

2 个答案:

答案 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);