将 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 可能符合您的要求。