Java:将10位数字符串转换为float

时间:2015-02-13 02:44:05

标签: java csv

我有一个来自csv文件中其中一个记录的10位数字符串,我需要将其转换为float并使用预准备语句上传到oracle表:

String s = '2788539392';

Float f = Float.parseFloat(s);

sql_statement.setFloat(1, f));

为什么它会改变以下值:

csv : 2788539392
java: 2.78853939E9 (float)
oracle: 2788539390

任何人都知道如何使用float保存确切的值?

3 个答案:

答案 0 :(得分:2)

Float是精度类型有限的,会有舍入错误,数字这么大。这是由于数字在浮点数中的表示方式(详见@LưuVĩnhPhúc的答案)。如果您需要保留确切的值,请使用BigDecimal等类型。

答案 1 :(得分:1)

问题是这个数字太大而不适合浮动。如果您使用BigDecimal,则会保留正确的值。

String s = "2788539392";

BigDecimal d = new BigDecimal(s);
System.out.println(d);

我希望这有帮助。祝你好运!

答案 2 :(得分:0)

Java中的

float是IEEE-754单精度,其具有24位尾数,因此任何宽于24位的整数将其精度限制为24位或大约7.2位十进制数。 double有53位尾数,因此它可以存储任何大小为2 53 -1的整数。

如果只需要使用整数,请使用64位类型的long。如果您需要精确存储十进制小数值,则必须使用BigDecimal。否则double可能符合您的要求。