为什么浮点数最多只能打印8位数?

时间:2015-09-30 13:27:10

标签: java floating-point precision

当我在声明

下面打印时
System.out.println(121.3456422f);

我的输出为121.34564(8位数)

如果我正在打印

System.out.println(121345642.333332f);

我的输出为1.2134564E8(包括E的10位数)

我想知道为什么只浮动最多8位数?

3 个答案:

答案 0 :(得分:4)

float到String的默认转换会产生最短的小数,它会在输入时转换回float。这通常是大约8个十进制数字,因为float只有24位有效的有效数字。

121.3456422f的准确值是121.34564208984375。比它小的最大浮点数是121.34563446044921875。 121.34564介于这些值之间,更接近原始值而不是替代值,因此8就足够了。

答案 1 :(得分:1)

你应该使用Double。它对于漂浮型来说太大了。您可以这样做:

System.out.println(121.3456422d);

JVM会自动将所有变量转换为类型限制。 (http://ideone.com/Pwn8yx):

import java.util.*;
import java.lang.*;
import java.io.*;

class MyClass
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println("Max float value:" + Float.MAX_VALUE);
        System.out.println("Min float value:" + Float.MIN_VALUE);
        System.out.println("Double float value:" + Double.MAX_VALUE);
        System.out.println("Double float value:" + Double.MIN_VALUE);
    }
}

float:浮点数据类型是单精度32位IEEE 754浮点。

double:双数据类型是双精度64位IEEE 754浮点。

查看有关原始类型的Oracle文档:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 2 :(得分:0)

如果要确保打印的位数,请使用String.format()函数。

例如:

System.out.println(String.format("%3.10f", 121.3456422f));

我认为你的精度太高了。或者,您可以使用double,自然的toString()应该打印您想要的精度。