Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
jackshirazidoubletostringjava优化问题_Java_String_Optimization_Double - Fatal编程技术网

jackshirazidoubletostringjava优化问题

jackshirazidoubletostringjava优化问题,java,string,optimization,double,Java,String,Optimization,Double,在JackShirazi的书Java性能调优中,他提出了一种优化从双精度到字符串转换的方法。 优化代码可在此处找到: 但是,2位数显示的特定数字似乎存在一些问题,当使用0.0951到0.0999的方法时,它返回0.0a,这显然是不正确的。 使用0.0949运行时,它将正确返回0.09。 使用1.0951运行时,正确返回1.10 你知道怎么了吗?我正试图理解其中的一些细节,但还没有找到罪魁祸首 这是我的主要测试: public DoubleToString() { double d1 = 0.09

在JackShirazi的书Java性能调优中,他提出了一种优化从双精度到字符串转换的方法。 优化代码可在此处找到:

但是,2位数显示的特定数字似乎存在一些问题,当使用0.0951到0.0999的方法时,它返回0.0a,这显然是不正确的。 使用0.0949运行时,它将正确返回0.09。 使用1.0951运行时,正确返回1.10

你知道怎么了吗?我正试图理解其中的一些细节,但还没有找到罪魁祸首

这是我的主要测试:

public DoubleToString() {
double d1 = 0.0949;
double d2 = 0.0951;

StringBuffer sb = new StringBuffer();

sb.append("display d1 = ");
appendFormatted(sb, d1, 2, '.', ',', 3, '-', '-');
sb.append(" : ");
appendFormatted(sb, d2, 2, '.', ',', 3, '-', '-');

System.out.println(sb.toString());
}
强烈建议:

创建一个基准,在一个循环中进行100000或一百万次双倍到字符串的转换

获取使用appendFormatted的时间

比较从Java1.42002开始使用标准Java或从Java52004开始使用printf的时间

考虑到这篇文章写在2000年。。。他所说的许多优化毫无疑问是完全过时的,与当前的JDK和JVM相比

IMHO…

强烈建议:

创建一个基准,在一个循环中进行100000或一百万次双倍到字符串的转换

获取使用appendFormatted的时间

比较从Java1.42002开始使用标准Java或从Java52004开始使用printf的时间

考虑到这篇文章写在2000年。。。他所说的许多优化毫无疑问是完全过时的,与当前的JDK和JVM相比


IMHO…

也许你应该联系Jack Shirazi?也许你应该联系Jack Shirazi?有趣的评论。我就是这么做的,结果表明Shirazi的方法仍然比DecimalFormat和Formatter快得多。循环10000000:appendFormatted=5.3s,DecimalFormat=31.3s,Formatter=63。2s@Bastien我在我的一个项目中使用了同一个类,但没有注意到您面临的问题。与DecimalFormatter相比,它返回的是预期结果。虽然在我的测试中它的长度是15位数。在您的情况下,问题可能来自您正在使用的JVM版本。你最终是如何解决问题的。我必须说,与我所处的OpenJdk 11相比,Jack的实现速度仍然是最快的。有趣的评论。我就是这么做的,结果表明Shirazi的方法仍然比DecimalFormat和Formatter快得多。循环10000000:appendFormatted=5.3s,DecimalFormat=31.3s,Formatter=63。2s@Bastien我在我的一个项目中使用了同一个类,但没有注意到您面临的问题。与DecimalFormatter相比,它返回的是预期结果。虽然在我的测试中它的长度是15位数。在您的情况下,问题可能来自您正在使用的JVM版本。你最终是如何解决问题的。我必须说,与我所处的OpenJdk 11相比,Jack的实现仍然是最快的。