我发现我的 Java 应用程序存在舍入错误。用于四舍五入的方法是:
public static double round(double value,double precision)
{
return Math.round(value * precision) / precision;
}
这可能有一个错误(即round(138.515,100)应该返回138.52,并返回138.51)所以我创建了以下舍入器:
// Mikeldi's rounder
public static double round2DecimalPlaces(double value,int decimalPlaces)
{
int s = value<0?-1:1;
double p = 1;
for (int i = 0; i < decimalPlaces; i++) {
p*=10;
}
double n = (long) value;
double d = ((value*10*p)-(n*10*p));
d +=s*5;
d /= 10;
d = (long)d;
d /= p;
return d+n;
}
我创建了这个方法,因为其他舍入方法给系统增加了太多的延迟(低延迟系统)。这个比上一个快 10 倍左右。
注意:此舍入器仅用于舍入到正小数位(或 0)。
这个新的圆角器有什么我没有看到的问题吗?
谢谢,