Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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:解析NumberFormat对象并将其分配给Number对象_Java_Number Formatting_Digits - Fatal编程技术网

Java:解析NumberFormat对象并将其分配给Number对象

Java:解析NumberFormat对象并将其分配给Number对象,java,number-formatting,digits,Java,Number Formatting,Digits,我已将最大分数位数设置为4, 但是为什么N.doublevalue()的输出是1234.567899999 不是1234.5679 try{ NumberFormat NF = NumberFormat.getInstance(); NF.setMaximumFractionDigits(4); NF.setMinimumFractionDigits(3); Number N = NF.parse("1234.56789999999"); Syst

我已将最大分数位数设置为4, 但是为什么N.doublevalue()的输出是1234.567899999 不是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();}
    }

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

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