将 10 位数字字符串转换为浮点数
Convert 10-digit string to float
我有一个来自 csv 文件中记录之一的 10 位数字字符串,我需要将其转换为 float
并使用准备好的语句上传到 Oracle table:
String s = '2788539392';
Float f = Float.parseFloat(s);
sql_statement.setFloat(1, f));
为什么它改变值从:
csv : 2788539392
java: 2.78853939E9 (float)
oracle: 2788539390
有谁知道如何使用 float 保留精确值?
浮点数是有限精度类型,这么大的数字会有舍入误差。这是由于数字在浮点数位中的表示方式(有关详细信息,请参阅@Lưu Vĩnh Phúc 的回答)。如果您需要保留确切的值,请使用 BigDecimal
.
之类的类型
问题是这个数字对于浮点数来说太大了。如果您使用 BigDecimal
它将保留正确的值。
String s = "2788539392";
BigDecimal d = new BigDecimal(s);
System.out.println(d);
希望对您有所帮助。祝你好运!
Java 中的 float
是具有 24 位尾数的 IEEE-754 单精度,因此任何大于 24 位的整数的精度都将限制为 24 位或大约 7.2 位十进制数字。 double
有 53 位尾数,因此它可以存储任何整数,最大为 253-1.
如果您只需要使用整数,请使用 long
,这是一种 64 位类型。如果您需要精确地以十进制形式存储小数值,那么您必须使用 BigDecimal
。否则 double
可能符合您的要求。
我有一个来自 csv 文件中记录之一的 10 位数字字符串,我需要将其转换为 float
并使用准备好的语句上传到 Oracle table:
String s = '2788539392';
Float f = Float.parseFloat(s);
sql_statement.setFloat(1, f));
为什么它改变值从:
csv : 2788539392
java: 2.78853939E9 (float)
oracle: 2788539390
有谁知道如何使用 float 保留精确值?
浮点数是有限精度类型,这么大的数字会有舍入误差。这是由于数字在浮点数位中的表示方式(有关详细信息,请参阅@Lưu Vĩnh Phúc 的回答)。如果您需要保留确切的值,请使用 BigDecimal
.
问题是这个数字对于浮点数来说太大了。如果您使用 BigDecimal
它将保留正确的值。
String s = "2788539392";
BigDecimal d = new BigDecimal(s);
System.out.println(d);
希望对您有所帮助。祝你好运!
float
是具有 24 位尾数的 IEEE-754 单精度,因此任何大于 24 位的整数的精度都将限制为 24 位或大约 7.2 位十进制数字。 double
有 53 位尾数,因此它可以存储任何整数,最大为 253-1.
如果您只需要使用整数,请使用 long
,这是一种 64 位类型。如果您需要精确地以十进制形式存储小数值,那么您必须使用 BigDecimal
。否则 double
可能符合您的要求。