使用 double 时限制 Java 中的小数位数
Limit decimal digits in Java when using double
我有几个变量,都是 int,我用它们做了这个操作:
percentage = ((double)100) - (((double)100)/(((double)64)*((double)dist.size()-1))*((double)bestDist));
强制将它们加倍,因为我想计算一个百分比。问题是(当然)我得到像 65.88841666666666 这样的结果,我想得到一个只有 2 位十进制数字的数字,我不介意近似它,我也可以削减所有数字所以我会得到 65.88 而不是65.89。我该怎么做?
你可以为此使用 round
double roundedPercentage = (double) Math.round(percentage * 100) / 100;
如果这是为了显示结果,您可以使用像这样的格式化程序:
String formatted = String.format("%.2f", 65.88888);
这里.2表示显示小数点后2位。如需更多选项,请尝试 BigDecimal
虽然@CHERUKURI建议的是我自己真正使用的,但是在MAX_DOUBLE时会产生不准确的结果。
Math.ceil(percentage) + Math.ceil((Math.ceil(percentage) - percentage) * 100)/100.0;
它有太多的方法调用,但是,它会给你它应该给你的。
如果数字很小,那么以下就足够了:
(double) Math.round(percentage * 100) / 100;
我有几个变量,都是 int,我用它们做了这个操作:
percentage = ((double)100) - (((double)100)/(((double)64)*((double)dist.size()-1))*((double)bestDist));
强制将它们加倍,因为我想计算一个百分比。问题是(当然)我得到像 65.88841666666666 这样的结果,我想得到一个只有 2 位十进制数字的数字,我不介意近似它,我也可以削减所有数字所以我会得到 65.88 而不是65.89。我该怎么做?
你可以为此使用 round
double roundedPercentage = (double) Math.round(percentage * 100) / 100;
如果这是为了显示结果,您可以使用像这样的格式化程序:
String formatted = String.format("%.2f", 65.88888);
这里.2表示显示小数点后2位。如需更多选项,请尝试 BigDecimal
虽然@CHERUKURI建议的是我自己真正使用的,但是在MAX_DOUBLE时会产生不准确的结果。
Math.ceil(percentage) + Math.ceil((Math.ceil(percentage) - percentage) * 100)/100.0;
它有太多的方法调用,但是,它会给你它应该给你的。
如果数字很小,那么以下就足够了:
(double) Math.round(percentage * 100) / 100;