Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将IEEE 754 double转换为字符串的纯Java代码_Java_String_Double_Ieee 754 - Fatal编程技术网

将IEEE 754 double转换为字符串的纯Java代码

将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类路径的源代码,但它使用本机方法进行转换。我搜索了一下,发现

我有一个64位的
包含一个
的IEEE 754表示。我想把它转换成一个字符串,就像标准的Java
Double.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位整数,那么计算是精确的。但这不是典型情况。在典型情况下,会丢失精度。