我正在尝试上传其列包含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
答案 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会帮助您。