字符串的大十进制

时间:2012-07-18 07:33:10

标签: java tostring bigdecimal

我正在尝试上传其列包含250位以上的Excel字段。当我在excel中输入值时,它会自动将其转换为此格式 1.23456789012345E + 256当我尝试使用Big Decimal的toPlainString方法读取值时,它返回15位后的所有0。如果我给出没有指数的整数,这同样可以正常工作。 当输入为1.23456789012345E + 256?

时,如何获得整数
BigDecimal bd = new BigDecimal(String.valueOf("1.23456789012345E+256"));
System.out.println( bd.toPlainString());

返回字符串

* 123456789012345 * 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

4 个答案:

答案 0 :(得分:4)

  

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

这就是整数作为BigDecimal。

1.23456789012345E + 256 == 1234567890123450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


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

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

打印

1.23456789012345E256

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我可以通过在单个引号前加上数字'1233278238789787

来获得原始数字。

答案 3 :(得分:0)

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