【问题标题】:Java : Parse NumberFormat Object and assign it to Number ObjectJava:解析 NumberFormat 对象并将其分配给 Number 对象
【发布时间】:2016-09-08 05:50:46
【问题描述】:

我已将最大小数位数设置为 4, 但是为什么 N.doublevalue() 的输出是 1234.56789999999 不是 1234.5679?

    try{
    NumberFormat NF = NumberFormat.getInstance();
    NF.setMaximumFractionDigits(4);
    NF.setMinimumFractionDigits(3);
    Number N = NF.parse("1234.56789999999");
    System.out.println(N.doubleValue());
    System.out.println(NF.format(1234.567899999));
    }

    catch(ParseException e){e.printStackTrace();}
    }

【问题讨论】:

  • 因为您只是打印一个没有任何内在格式的double
  • 您的具体要求是什么?为了精确舍入,您应该使用 BigDecimal。
  • 参考这个链接你会得到确切的想法stackoverflow.com/questions/50532/…
  • 谢谢大家。我在一本书中看到了代码,但我不知道它是如何工作的,所以试图得到答案。我现在明白了。

标签: java number-formatting digits


【解决方案1】:

N.doubleValue() 实际上将您的Number 转换为double。 double 是一种基本类型,它不支持任何舍入,它是写入内存中的原始浮点值,它没有您尝试转换它的确切值,因此它是可能的值的最佳匹配对于double。也就是说,double 没有所有可能的值,因为它的内存有限,双精度数据类型是双精度 64 位 IEEE 754 浮点数。精度(点后的位置)较小的double 值较大,较大的值较小。非常大的double 数字在点之后甚至没有任何精度。 float 也是如此,但 float 的精度远低于 double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2015-09-22
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多