为什么浮动打印最多只能打印 8 位数字?
Why does float print only up to 8 Digits?
当我打印下面的语句时
System.out.println(121.3456422f);
我得到的输出是 121.34564
(8 位数字)
如果我正在打印
System.out.println(121345642.333332f);
我得到的输出为 1.2134564E8
(10 位数字,包括 E)
我想知道为什么最多只能浮点8位?
您应该为此使用 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: float 数据类型是单精度 32 位 IEEE 754 浮点数。
double: double 数据类型是双精度 64 位 IEEE 754 浮点数。
查看有关原始类型的 Oracle 文档:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
如果要确保打印的位数,请使用 String.format() 函数。
例如:
System.out.println(String.format("%3.10f", 121.3456422f));
我认为你的精度对于浮点数来说太高了。或者,您可以使用 double 并且自然的 toString() 应该打印您想要的精度。
float 到 String 的默认转换会生成最短的小数部分,该小数点将在输入时转换回 float。这通常是大约 8 位十进制数字,因为浮点数只有 24 位有效有效位数。
121.3456422f 的准确值为 121.34564208984375。比它小的最大浮点数是 121.34563446044921875。 121.34564 在这些值之间并且更接近原始值而不是替代值,因此 8 位就足够了。
当我打印下面的语句时
System.out.println(121.3456422f);
我得到的输出是 121.34564
(8 位数字)
如果我正在打印
System.out.println(121345642.333332f);
我得到的输出为 1.2134564E8
(10 位数字,包括 E)
我想知道为什么最多只能浮点8位?
您应该为此使用 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: float 数据类型是单精度 32 位 IEEE 754 浮点数。
double: double 数据类型是双精度 64 位 IEEE 754 浮点数。
查看有关原始类型的 Oracle 文档:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
如果要确保打印的位数,请使用 String.format() 函数。
例如:
System.out.println(String.format("%3.10f", 121.3456422f));
我认为你的精度对于浮点数来说太高了。或者,您可以使用 double 并且自然的 toString() 应该打印您想要的精度。
float 到 String 的默认转换会生成最短的小数部分,该小数点将在输入时转换回 float。这通常是大约 8 位十进制数字,因为浮点数只有 24 位有效有效位数。
121.3456422f 的准确值为 121.34564208984375。比它小的最大浮点数是 121.34563446044921875。 121.34564 在这些值之间并且更接近原始值而不是替代值,因此 8 位就足够了。