Java 大小数到字符串

Java 大小数到字符串,java,tostring,bigdecimal,Java,Tostring,Bigdecimal,我正试图上传一个excel字段,其列包含超过250位数字。当我在excel中输入值时,它会自动将其转换为此格式 1.23456789012345E+256,当我尝试使用大十进制的toPlainString方法读取值时,它会返回15位之后的所有0。如果我给出不带指数的整数,同样也可以。 当输入为1.23456789012345E+256时,如何获取整数 BigDecimal bd = new BigDecimal(String.valueOf("1.23456789012345E+256"));

我正试图上传一个excel字段,其列包含超过250位数字。当我在excel中输入值时,它会自动将其转换为此格式 1.23456789012345E+256,当我尝试使用大十进制的toPlainString方法读取值时,它会返回15位之后的所有0。如果我给出不带指数的整数,同样也可以。 当输入为1.23456789012345E+256时,如何获取整数

BigDecimal bd = new BigDecimal(String.valueOf("1.23456789012345E+256"));
System.out.println( bd.toPlainString());
返回字符串

*123456789012345*00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

当输入为1.23456789012345E+256时,如何获取整数

这是一个大十进制的整数

1.23456789012345E+256==12345678012345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


你为什么用BigDecimal?Excel使用的是
double
,保留它使用的类型更有意义

double d = 1.23456789012345E+256;
System.out.println(d);
印刷品

1.23456789012345E256
当输入为1.23456789012345E+256时,如何获取整数

这是一个大十进制的整数

1.23456789012345E+256==12345678012345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


你为什么用BigDecimal?Excel使用的是
double
,保留它使用的类型更有意义

double d = 1.23456789012345E+256;
System.out.println(d);
印刷品

1.23456789012345E256


你做不到,精度已经丧失。您必须以更高精度的格式存储您的值。

不行,精度会丢失。您必须以更高精度的格式存储您的值。

在对数字“1233278238789787”进行四舍五入之前,我可以通过在数字“1233278238789787”前面加一个引号来获取原始数字。

我可以通过在数字“1233278238789787”前面加一个引号来获取原始数字而不是双倍。它还基于您的数据库列数据类型。如果您的数据库允许1.23456789012345E+256,则如果数据库列为Float,则Double将对您有所帮助。

尝试使用Double而不是Double。它还基于您的数据库列数据类型。如果您的数据库允许1.23456789012345E+256,则如果数据库列为Float,则Double将帮助您。

您所说的“整数”是什么意思?在四舍五入到
[some value]E+256
之前的原始“整数”?我可以在数字“1233278238789787”前面加上一个引号,从而在四舍五入之前获得原始数字“整数”是什么意思?在四舍五入到
[some value]E+256
之前的原始“整数”?我可以通过在数字“1233278238789787”前加一个引号来获取原始数字。我需要将实际数字保存在数据库中。这就是为什么尝试使用大十进制的to plain string方法读取值。如果数字是双精度的,请告诉我是否有更好的方法,如果数字是1.23456789012345E+256,请保留该值并键入。转换它可能会改变值或使试图使用它的人感到困惑。;)您不能将无穷大或NaN转换为BigDecimal。我需要将实际数字保存在数据库中。这就是为什么尝试使用大十进制的to plain string方法读取值。如果数字是双精度的,请告诉我是否有更好的方法,如果数字是1.23456789012345E+256,请保留该值并键入。转换它可能会改变值或使试图使用它的人感到困惑。;)你不能将无穷大或NaN转换为BigDecimal。我看不出有任何精度损失,它们是相同的(见我的答案)。你建议什么精度比BigDecimal高?皮特:我想他的意思是,他如何恢复原始数字?我不会将值转换为其他类型,因此没有必要“恢复”也可能。只有当数字转换成指数格式时,问题才会出现。如果没有指数,我可以检索原始数字。例如,我用350 4s代替指数尝试了同样的方法。我没有发现任何精度损失,它们是相同的(见我的答案)。你建议什么精度比BigDecimal高?皮特:我想他的意思是,他如何恢复原始数字?我不会将值转换为另一种类型,因此没有必要“恢复”也可能。只有当数字转换成指数格式时,问题才会出现。如果没有指数,我可以检索原始数字。例如,我尝试了同样的方法,用3504s替换指数。。