private void getRound() {
// this is very simple and interesting
double a = 5, b = 3, c;
c = a / b;
System.out.println(" round val is " + c);
// round val is : 1.6666666666666667
// if you want to only two precision point with double we
// can use formate option in String
// which takes 2 parameters one is formte specifier which
// shows dicimal places another double value
String s = String.format("%.2f", c);
double val = Double.parseDouble(s);
System.out.println(" val is :" + val);
// now out put will be : val is :1.67
}
22条答案
按热度按时间p1tboqfb16#
使用java.math.bigdecimal
double在内部是二进制分数,所以它们有时不能精确地表示十进制分数。
b5buobof17#
vxbzzdmp18#
你正面临双重类型的精度限制。
数学有一些任意精度的算术工具。
y4ekin9u19#
如果您只想将值作为分数进行处理,那么可以创建一个包含分子和分母字段的分数类。
写加法、减法、乘法和除法以及todouble方法。这样可以避免计算过程中出现浮动。
编辑:快速实施,
62lalag420#
double是java源代码中十进制数的近似值。您看到了double(二进制编码的值)和源代码(十进制编码的)之间不匹配的结果。
java正在生成最接近的二进制近似值。可以使用java.text.decimalformat来显示外观更好的十进制值。
dluptydi21#
例如,当您输入一个双数时,
33.33333333333333
,得到的值实际上是最接近的可表示双精度值,确切地说:除以100得出:
它也不能表示为双精度数,所以再次四舍五入到最接近的可表示值,即:
当您打印出这个值时,它会再次四舍五入到17位小数,给出:
sxpgvts322#
计算机以二进制形式存储数字,实际上不能准确地表示33.333或100.0之类的数字。这是使用双打的技巧之一。在将答案展示给用户之前,您必须对其进行四舍五入。幸运的是,在大多数应用程序中,您不需要那么多小数位。