jackshirazidoubletostringjava优化问题
在JackShirazi的书Java性能调优中,他提出了一种优化从双精度到字符串转换的方法。 优化代码可在此处找到: 但是,2位数显示的特定数字似乎存在一些问题,当使用0.0951到0.0999的方法时,它返回0.0a,这显然是不正确的。 使用0.0949运行时,它将正确返回0.09。 使用1.0951运行时,正确返回1.10 你知道怎么了吗?我正试图理解其中的一些细节,但还没有找到罪魁祸首 这是我的主要测试: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
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的实现仍然是最快的。