java 中的值四舍五入到小数点后两位
rounding off values to 2 decimal places in java
我正在使用 Java 7,我只是想将值四舍五入到小数点后两位,示例代码也来自各种 Whosebug 链接:
Double d1= 4.37 , d2=0.694444444; //expected result after multiplication of numbers d1 and d2 is 3.04
DecimalFormat df = new DecimalFormat("#.#####");
String str = df.format(d1*d2);
d=(Double)df.parse(str);
System.out.println(d);//Prints 3.03472
df = new DecimalFormat("#.####");
str = df.format(d);
d= (Double)df.parse(str);
System.out.println(d);//Prints 3.0347
df = new DecimalFormat("#.###");
str = df.format(d);
d= (Double)df.parse(str);
System.out.println(d);//Prints 3.035
df = new DecimalFormat("#.##");
str = df.format(d);
d= (Double)df.parse(str);
System.out.println(d); //Prints my desired result 3.04
难道不可能在 2 或 3 个语句中做到这一点。
此致
克里斯
问题是预期结果 3.04 没有意义,如果四舍五入到最接近的值,它应该是 3.03。 4.37*0.694444444 的结果是 3.03472222028,它更接近 3.03,然后更接近 3.04:
abs 3.03472222028 - 3.03 = 0.00472222028
abs 3.03472222028 - 3.04 = 0.00527777972
所以实际上你只需要
new DecimalFormat("#.##");
但正如 Klitos 所说,您可能希望尽可能长时间地保留真实值,并且只有在必须将其持久保存到数据库时才进行舍入。你可以在哪里使用
String.format("%.2f", value)
17 月 11 日更新
根据您提供的示例:
DecimalFormat df = new DecimalFormat("#.##");
String result = df.format(10.85*1/1.44);
结果为7.53(正确)。
但是,使用您的代码,结果是 7.54,这是错误的。
那是因为你按顺序对每个数字进行舍入,误差累积,导致舍入误差,如你提供的示例所示。
所以你真的不需要编写自己的舍入 algorithm.You 可以只使用 new DecimalFormat("#.##")
的默认值。
我正在使用 Java 7,我只是想将值四舍五入到小数点后两位,示例代码也来自各种 Whosebug 链接:
Double d1= 4.37 , d2=0.694444444; //expected result after multiplication of numbers d1 and d2 is 3.04
DecimalFormat df = new DecimalFormat("#.#####");
String str = df.format(d1*d2);
d=(Double)df.parse(str);
System.out.println(d);//Prints 3.03472
df = new DecimalFormat("#.####");
str = df.format(d);
d= (Double)df.parse(str);
System.out.println(d);//Prints 3.0347
df = new DecimalFormat("#.###");
str = df.format(d);
d= (Double)df.parse(str);
System.out.println(d);//Prints 3.035
df = new DecimalFormat("#.##");
str = df.format(d);
d= (Double)df.parse(str);
System.out.println(d); //Prints my desired result 3.04
难道不可能在 2 或 3 个语句中做到这一点。
此致
克里斯
问题是预期结果 3.04 没有意义,如果四舍五入到最接近的值,它应该是 3.03。 4.37*0.694444444 的结果是 3.03472222028,它更接近 3.03,然后更接近 3.04:
abs 3.03472222028 - 3.03 = 0.00472222028
abs 3.03472222028 - 3.04 = 0.00527777972
所以实际上你只需要
new DecimalFormat("#.##");
但正如 Klitos 所说,您可能希望尽可能长时间地保留真实值,并且只有在必须将其持久保存到数据库时才进行舍入。你可以在哪里使用
String.format("%.2f", value)
17 月 11 日更新
根据您提供的示例:
DecimalFormat df = new DecimalFormat("#.##");
String result = df.format(10.85*1/1.44);
结果为7.53(正确)。 但是,使用您的代码,结果是 7.54,这是错误的。
那是因为你按顺序对每个数字进行舍入,误差累积,导致舍入误差,如你提供的示例所示。
所以你真的不需要编写自己的舍入 algorithm.You 可以只使用 new DecimalFormat("#.##")
的默认值。