我有这两个变量
double num = 540.512
double sum = 1978.8
然后我做了这个表情
double total = Math.round((num/ sum * 100) * 10) / 10;
但是最终结果为27.0。
实际上,我还有很多其他变量,当我在表达式中使用它们时,十分位总是得到0。
我一段时间前创造的有用方法...
private static double round (double value, int precision) {
int scale = (int) Math.pow(10, precision);
return (double) Math.round(value * scale) / scale;
}
round(16.46, 1);
的预期结果是 16.5
。 - NBTX试一试这个
例如
DecimalFormat df = new DecimalFormat("#.##");
df.format(55.544545);
输出:
55.54
Double toBeTruncated = new Double("2.25");
Double truncatedDouble = new BigDecimal(toBeTruncated).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
它将返回2.3
double value = 540.512 / 1978.8 * 100;
// Apache commons math
double rounded1 = Precision.round(value, 1);
double rounded2 = Precision.round(value, 1, BigDecimal.ROUND_HALF_UP);
// Colt
double rounded3 = Functions.round(0.1).apply(value)
// Weka
double rounded4 = Utils.roundDouble(value, 1)
Maven依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>colt</groupId>
<artifactId>colt</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>nz.ac.waikato.cms.weka</groupId>
<artifactId>weka-stable</artifactId>
<version>3.6.12</version>
</dependency>
Double number = new Double("5.25");
Double tDouble =
new BigDecimal(number).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
这将返回5.3。
BigDecimal.ROUND_HALF_UP
从Java 9+开始已被弃用。请优先使用RoundingMode.HALF_UP
。 - Ashley Frieze我认为一种更易读的整洁替代方法,但由于双精度和字符串之间的转换,可能效率稍微低一些:
double num = 540.512;
double sum = 1978.8;
// NOTE: This does take care of rounding
String str = String.format("%.1f", (num/sum) * 100.0);
如果您希望将答案作为双精度浮点数返回,您当然可以将其转换回来:
double ans = Double.parseDouble(str);
你的方法是正确的,你只需要在十位数后面加上 .0 就可以解决问题!
double example = Math.round((187/35) * 10.0) / 10.0;
5.3
DecimalFormat decimalFormat = new DecimalFormat(".#");
String result = decimalFormat.format(12.763); // --> 12.7