浮点数到字符串的转换输出不同
Float to string conversion output differs
我正在尝试将字符串解析为浮点数,但它给了我一些不同的输出。
假设我的代码:
String a = "111111111111111111111.23";
Float f = Float.parseFloat(a);
System.out.println(f);
它给了我这样的东西:1.1111111E20
以简单的方式,它给了我111111110000000000000
如何显示所有数据?我不想截断输入数据。
How to get whole data as it is. Don't want to truncate the input data.
那么无论你做什么,都不要使用 float
。在 至少 使用 double
,但即使 double
也会与该值斗争,因为 IEEE-754 双精度浮点数仅精确到 大约 15 位数字,以 10 为基数表示。要获得更高的精度,请查看 BigDecimal
。
BigDecimal
从不自动舍入或失去精度,在计算中是首选。
一个float
是一个用32位表示的十进制数字类型。
A double
是一个 64 位十进制数,因此它可以表示比浮点数更大的值。
您可以使用 BigDecimal
public static void main(String[] args) {
String a = "111111111111111111111.23";
BigDecimal f = new BigDecimal(a);
System.out.println(f);
}
输出
111111111111111111111.23
我正在尝试将字符串解析为浮点数,但它给了我一些不同的输出。 假设我的代码:
String a = "111111111111111111111.23";
Float f = Float.parseFloat(a);
System.out.println(f);
它给了我这样的东西:1.1111111E20
以简单的方式,它给了我111111110000000000000
如何显示所有数据?我不想截断输入数据。
How to get whole data as it is. Don't want to truncate the input data.
那么无论你做什么,都不要使用 float
。在 至少 使用 double
,但即使 double
也会与该值斗争,因为 IEEE-754 双精度浮点数仅精确到 大约 15 位数字,以 10 为基数表示。要获得更高的精度,请查看 BigDecimal
。
BigDecimal
从不自动舍入或失去精度,在计算中是首选。
一个float
是一个用32位表示的十进制数字类型。
A double
是一个 64 位十进制数,因此它可以表示比浮点数更大的值。
您可以使用 BigDecimal
public static void main(String[] args) {
String a = "111111111111111111111.23";
BigDecimal f = new BigDecimal(a);
System.out.println(f);
}
输出
111111111111111111111.23