将IEEE 754 double转换为字符串的纯Java代码
我有一个64位的将IEEE 754 double转换为字符串的纯Java代码,java,string,double,ieee-754,Java,String,Double,Ieee 754,我有一个64位的长包含一个双的IEEE 754表示。我想把它转换成一个字符串,就像标准的JavaDouble.toString(d)那样。但是,我不能使用Double类的任何方法,因为它们有缺陷。(String.valueOf(d)和“+d也不起作用,因为它们在内部使用Double.toString(d)。NumberFormat不起作用,因为它失去了精度。)所以我需要纯Java代码来进行转换 我在哪里可以找到这样的代码?我尝试了GNU类路径的源代码,但它使用本机方法进行转换。我搜索了一下,发现
长
包含一个双
的IEEE 754表示。我想把它转换成一个字符串,就像标准的JavaDouble.toString(d)
那样。但是,我不能使用Double
类的任何方法,因为它们有缺陷。(String.valueOf(d)
和“+d
也不起作用,因为它们在内部使用Double.toString(d)
。NumberFormat
不起作用,因为它失去了精度。)所以我需要纯Java代码来进行转换
我在哪里可以找到这样的代码?我尝试了GNU类路径的源代码,但它使用本机方法进行转换。我搜索了一下,发现:。 这看起来很复杂,但是代码在GPL许可证(或Mozilla公共许可证1.1许可证)下 我希望它能帮助你 (我甚至找到了你提到的那个。) 编辑: [Andrew Thompson]是对的,浮点运算经常(总是?)失去精度。
如前所述,您可能想使用您能详细说明一下Double方法有哪些缺陷吗?(出于兴趣)在异国情调的JVM实现中,
Double.toString(d)
没有返回足够的数字,即它将ABC.DEFGH
格式化为ABC.DE
。我需要所有的数字。哦,那太难看了。它一定要快吗?“因为它失去了精度”我很确定,当我们将数字表示为IEEE 754时,精度就失去了。感谢您为我找到dtoa.java,我刚刚给出了您的答案。呃,这确实很复杂。嗯,你没有看到[(C版本
)…它有很多很多前置处理器指令。不,我们使用浮点并不总是会丢失精度,例如IEEE 754,如果数字是50位整数,那么计算是精确的。但这不是典型情况。在典型情况下,会丢失精度。