答案 0 :(得分:55)
Math.round(number*100.0)/100.0;
答案 1 :(得分:33)
double RoundTo2Decimals(double val) {
DecimalFormat df2 = new DecimalFormat("###.##");
return Double.valueOf(df2.format(val));
}
答案 2 :(得分:29)
2和2.00之间的内部表示没有区别。您可以使用Math.round
将值舍入到最接近的整数 - 将该轮舍入到2位小数,您可以乘以100,舍入,然后除以100,但您不应期望结果为<由于二进制浮点算法的性质,em>完全 2dps。
如果您只对格式化一个小数点后两位的值感兴趣,请查看DecimalFormat
- 如果您在计算时感兴趣于多个小数位 / em>你应该真的使用BigDecimal
。这样你就会知道你真的在处理十进制数字,而不是“最近的double
值”。
如果您始终处理两位小数,您可能需要考虑的另一个选项是将值存储为long
或BigInteger
,因为它知道它正是例如,“实际”值的100倍 - 有效地存储美分而不是美元。
答案 3 :(得分:13)
import java.text.DecimalFormat;
public class RoundTest {
public static void main(String[] args) {
double i = 2;
DecimalFormat twoDForm = new DecimalFormat("#.00");
System.out.println(twoDForm.format(i));
double j=3.1;
System.out.println(twoDForm.format(j));
double k=4.144456;
System.out.println(twoDForm.format(k));
}
}
答案 4 :(得分:12)
我猜你需要一个格式化的输出。
System.out.printf("%.2f",d);
答案 5 :(得分:10)
您也可以使用此代码
public static double roundToDecimals(double d, int c)
{
int temp = (int)(d * Math.pow(10 , c));
return ((double)temp)/Math.pow(10 , c);
}
它可以控制需要点数后的数量。
d = number to round;
c = number of decimal places
认为这会有所帮助
答案 6 :(得分:5)
这样做。
public static void main(String[] args) {
double d = 12.349678;
int r = (int) Math.round(d*100);
double f = r / 100.0;
System.out.println(f);
}
你可以缩短这个方法,很容易理解这就是为什么我这样写的。
答案 7 :(得分:3)
public static double addDoubles(double a, double b) {
BigDecimal A = new BigDecimal(a + "");
BigDecimal B = new BigDecimal(b + "");
return A.add(B).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}