要精确加倍的字符串

时间:2014-05-22 16:45:05

标签: java string double precision

我有一个从文件中读取的字符串,值为:38.739793110376837

当我使用以下方法将此值转换为double时:

double.parseDouble("38.739793110376837");

我得到的结果是:38.73979311037684

我如何在双变量中获得原始值?

我不想使用BigDecimal数据类型。

1 个答案:

答案 0 :(得分:8)

  

我如何在双变量中得到原始值?

你不能。与原始值最接近的double 正好 38.739793110376837148578488267958164215087890625

这被转换为" 38.73979311037684"因为它是唯一标识double值的最短值。来自documentation

  

m或a的小数部分必须打印多少位数?必须至少有一个数字来表示小数部分,并且除此之外必须有多个,但只有多少,更多的数字才能唯一地将参数值与double类型的相邻值区分开来。也就是说,假设x是由该方法为有限非零参数d生成的十进制表示所表示的精确数学值。那么d必须是最接近x的double值;或者如果两个double值同样接近x,那么d必须是其中之一,d的有效位的最低有效位必须为0.

如果您希望完全保留原始值,则应使用BigDecimal