Java 将10位字符串转换为浮点

Java 将10位字符串转换为浮点,java,csv,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保留精确值吗?float

我有一个来自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保留精确值吗?

float是有限精度类型,如此大的数字会有舍入错误。这是由于浮点数位表示数字的方式(有关详细信息,请参阅@Lưu Vĩnh Phúc的答案)。如果需要保留精确值,请使用类似于
BigDecimal

Float is limited precision类型的类型,这样大的数字将出现舍入错误。这是由于浮点数位表示数字的方式(有关详细信息,请参阅@Lưu Vĩnh Phúc的答案)。如果需要保留精确值,请使用类似于
BigDecimal

Float is limited precision类型的类型,这样大的数字将出现舍入错误。这是由于浮点数位表示数字的方式(有关详细信息,请参阅@Lưu Vĩnh Phúc的答案)。如果需要保留精确值,请使用类似于
BigDecimal

Float is limited precision类型的类型,这样大的数字将出现舍入错误。这是由于浮点数位表示数字的方式(有关详细信息,请参阅@Lưu Vĩnh Phúc的答案)。如果需要保留精确的值,请使用类似于
BigDecimal

的类型。问题是该数字对于浮点来说太大。如果使用
BigDecimal
,它将保留正确的值

String s = "2788539392";

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

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

问题是这个数字对于浮点数来说太大了。如果使用
BigDecimal
,它将保留正确的值

String s = "2788539392";

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

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

问题是这个数字对于浮点数来说太大了。如果使用
BigDecimal
,它将保留正确的值

String s = "2788539392";

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

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

问题是这个数字对于浮点数来说太大了。如果使用
BigDecimal
,它将保留正确的值

String s = "2788539392";

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

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

Java中的浮点是IEEE-754单精度,它有24位尾数,因此任何大于24位的整数的精度将限制为24位或大约7.2位小数
double
有53位尾数,因此它可以存储最多253-1的任何整数


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

float
在Java中是IEEE-754单精度,具有24位尾数,因此任何大于24位的整数的精度将限制为24位或大约7.2位小数
double
有53位尾数,因此它可以存储最多253-1的任何整数


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

float
在Java中是IEEE-754单精度,具有24位尾数,因此任何大于24位的整数的精度将限制为24位或大约7.2位小数
double
有53位尾数,因此它可以存储最多253-1的任何整数


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

float
在Java中是IEEE-754单精度,具有24位尾数,因此任何大于24位的整数的精度将限制为24位或大约7.2位小数
double
有53位尾数,因此它可以存储最多253-1的任何整数


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

float的精度只有~7位,无法存储这样的10位float的精度只有~7位,无法存储这样的10位float的精度只有~7位,无法存储这样的10位float的精度只有~7位,无法存储这样的10位float的精度,只是不像人们期望的那样,因为不能精确地用十进制表示大多数数字。这也不是这个问题的问题,因为它是关于整数值的,double可以很容易地存储这些数字。你是对的,
float
在某些边界内是精确的(这个特定的情况在这些边界之外)。我已经将我的答案更新为“有限精度”。浮点是精确的,只是不像人们期望的那样,因为不能精确地表示十进制中的大多数数字。这也不是这个问题的问题,因为它是关于整数值的,double可以很容易地存储这些数字。你是对的,
float
在某些边界内是精确的(这个特定的情况在这些边界之外)。我已经将我的答案更新为“有限精度”。浮点是精确的,只是不像人们期望的那样,因为不能精确地表示十进制中的大多数数字。这也不是这个问题的问题,因为它是关于整数值的,double可以很容易地存储这些数字。你是对的,
float
在某些边界内是精确的(这个特定的情况在这些边界之外)。我已经将我的答案更新为“有限精度”。浮点是精确的,只是不像人们期望的那样,因为不能精确地表示十进制中的大多数数字。这不是问题所在