Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
Java 如何获得;最短的;唯一确定给定双精度的BigDecimal_Java_Double_Bigdecimal - Fatal编程技术网

Java 如何获得;最短的;唯一确定给定双精度的BigDecimal

Java 如何获得;最短的;唯一确定给定双精度的BigDecimal,java,double,bigdecimal,Java,Double,Bigdecimal,基本上,我很好奇如何不经过创建字符串的过程就获得新的BigDecimal(Double.toString(d)) 这个问题很复杂(也很有趣)。据我所知,该方法实际上并不返回给定双精度实际表示的数字的字符串表示形式,而是唯一标识给定双精度的(接近)最短实数的字符串表示形式 (实际上我并不需要这个。如果我需要的话,我很可能会遍历一个字符串。我只是好奇这个算法,它能找到唯一确定给定双精度值的“短”实数。) (这是关于的后续问题。)请参阅: 及 实施:和 在这个问题上有一个很好的解决方案,希望提供解决

基本上,我很好奇如何不经过创建字符串的过程就获得新的BigDecimal(Double.toString(d))

这个问题很复杂(也很有趣)。据我所知,该方法实际上并不返回给定双精度实际表示的数字的字符串表示形式,而是唯一标识给定双精度的(接近)最短实数的字符串表示形式

(实际上我并不需要这个。如果我需要的话,我很可能会遍历一个字符串。我只是好奇这个算法,它能找到唯一确定给定双精度值的“短”实数。)

(这是关于的后续问题。)

请参阅: 及

实施:和


在这个问题上有一个很好的解决方案,希望提供解决方案的人可能会感兴趣。如果你愿意在99.8%的情况下满足于最短的字符串,而在剩余的情况下满足于精确但不是最短的字符串,那么它(Grisu2)就可以在没有bignum的情况下工作。

也许你想的是
BigDecimal.valueOf(double)
,它可以做到这一点。

(主题外)我还以为你是Ron Rivest,从你的小照片上看。哇,PLDI'10。。。我似乎偶然发现了一个非常复杂的问题。@ahmet,这很有趣;自从20世纪70年代Ron和Gerry Sussman帮助我完成了一些EE&CS入门课程后,我就再也没有见过他了。这完全是作为
BigDecimal(Double.toString(val))
实现的,也就是说,它仍然要经过创建字符串的过程。我对背后的算法更感兴趣。如果你对算法感兴趣,那么
Double.toString()
的源代码应该能够提供帮助,对吧?我很好奇,是否有一种更“数学”的方法(如果你愿意,可以称之为base independent),而不是使用base-10字符串表示法。有关更好的上下文,请参见“前置问题:-)@Joachim:注意,源代码在
sun.misc
包中关闭。我们当然可以反编译。@BalusC:我很确定OpenJDK中有相当的代码,所以这是一种可能的途径。