简单计算在java中给出了不同的结果。
int a=5363/12*5;
out.println(a);// result is 2230
但实际上结果应为2234.5
如何纠正这个java结果?
答案 0 :(得分:6)
两个问题:
5363/12*5
给出整数结果(特别是除法是整数)。a
的类型为int
(整数)。修复:
double a=5363.0/12*5;
out.println(a);
请注意,通常在使用浮点运算时,不能指望得到精确的结果。以下是一篇非常好的读物:What Every Computer Scientist Should Know About Floating-Point Arithmetic。
答案 1 :(得分:3)
5363,12和5都被解释为整数。这里实际执行的计算是:
5363/12 = 446.9… - truncated to the int value 446
446 * 5 = 2230
尝试将a指定为float,并指示计算中的数字也创建为浮点数:
float a = 5363f/12f*5f
答案 2 :(得分:1)
将a
视为双倍。
使用as int会将其四舍五入为整数。
答案 3 :(得分:1)
因为右侧的所有文字数字都是整数(例如5363而不是5363.0),所以使用整数算术语义计算表达式,即/
进行整数除法。因此,5262/12等于446和446 * 5等于2230.此外,您的变量a
是int
,它只能保持整数值。
要解决此问题,您需要做两件事。将a
的类型更改为小数类型,例如float
或double
b)将5363和12中的至少一个表示为十进制类型,例如。
double a= 5363.0/12.0*5
答案 4 :(得分:1)
您可以重新排序表达式,而不是使用double。
假设5363/12 * 5 = 5363 * 5/12这将给你一个更接近的答案。你已经评论过要对结果进行舍入,所以你必须加上你除以的值的一半。
int a = (5363 * 5 + /* for rounding */ 6) / 12;
System.out.println(a);
打印
2235
答案 5 :(得分:0)
int
是一个整数 - 在.
之后没有。
您应该使用
double a = 5363d/12*5;
答案 6 :(得分:0)
它似乎有一些整数/双舍入问题:
double a=((double)5363/12)*5;
System.out.println("VALUE: "+a);
打印:
VALUE:2234.5833333333335
编辑:将结果舍入为整数值:
double a=((double)5363/12)*5;
long b=Math.round(a); //you can cast it to an int type if needed
System.out.println("ROUNDED: "+b);
打印:
ROUNDED:2235
答案 7 :(得分:-1)
使用双倍 双a = 5363/12 * 5; 的System.out.println(一);
或 转换整数,以防止丢失或精确。
int a =((int)5363/12 * 5); 的System.out.println(一);