java中的不同结果如何纠正
在java中,简单的计算会给出不同的结果java中的不同结果如何纠正,java,math,Java,Math,在java中,简单的计算会给出不同的结果 int a=5363/12*5; out.println(a);// result is 2230 但实际结果应该是2234.5 如何纠正这个java结果 将a作为双精度 将a作为int将其四舍五入为整数。两个问题: 表达式5363/12*5给出一个整数结果(特别是除法是整数) 变量a的类型为int(整数) 要修复: double a=5363.0/12*5; out.println(a); 请注意,一般来说,在使用浮点运算时,您不能期望得到精确
int a=5363/12*5;
out.println(a);// result is 2230
但实际结果应该是2234.5
如何纠正这个java结果 将
a
作为双精度
将a作为int将其四舍五入为整数。两个问题:
5363/12*5
给出一个整数结果(特别是除法是整数)a
的类型为int
(整数)double a=5363.0/12*5;
out.println(a);
请注意,一般来说,在使用浮点运算时,您不能期望得到精确的结果。下面是一个很好的解读:.一个
int
是一个整数-在
之后没有任何内容
你应该使用
double a = 5363d/12*5;
5363、12和5都被解释为int。此处实际执行的计算是:
5363/12 = 446.9… - truncated to the int value 446
446 * 5 = 2230
尝试将a指定为浮点数,并指示计算中的数字也创建为浮点数:
float a = 5363f/12f*5f
它似乎有一些整数/双舍入问题:
double a=((double)5363/12)*5;
System.out.println("VALUE: "+a);
印刷品:
价值:2234.5833335
编辑:将结果四舍五入为整数值:
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);
印刷品:
四舍五入:2235
因为右边的所有文字数字都是整数(例如5363而不是5363.0),所以表达式是使用整数算术语义计算的,即
/
进行整数除法。因此,5262/12等于446,446*5等于2230。另外,变量a
是一个int
,它只能保存一个整数值
要解决这个问题,你需要做两件事。将a
的类型更改为十进制类型,例如float
或double
b)将5363和12中的至少一个表示为十进制类型,例如
double a= 5363.0/12.0*5
使用双重
双a=5363/12*5;
系统输出打印项次(a)
或
强制转换整数,以防止丢失或精确
INTA=((int)5363/12*5);
系统输出打印项次(a) 您可以对表达式重新排序,而不是使用double 假设5363/12*5=5363*5/12,这将为您提供更接近的答案。您已注释希望对结果进行四舍五入,因此必须将要除以的值加上一半
int a = (5363 * 5 + /* for rounding */ 6) / 12;
System.out.println(a);
印刷品
2235
结果是2230.0,但应该是2234.5整数不是实数。双人和浮球都是。使用正确的数据类型。@mcfinnigan为什么其他人反对我的问题,他们的问题是什么?通过否决投票,他们想证明他们有权否决Votegive下面的答案,也可以将David Goldberg的论文链接起来@麦克芬尼根:双精度和浮点数不是实数——它们是浮点数。是的,我是学究,但一个人需要在这个领域。@HighPerformanceMark理所当然,我不够学究=)谢谢它是作为2234.5833335来的,但是如何将它限制到2235?要获得解决方案而不使用
double
或round
,看我的答案。是的,结果是2234.5833335,但应该是2234。5@tom不,不应该,你不能改变数学!有人否决了你的答案,你能把它四舍五入,使它成为2235吗?@Marcelo是的,我知道我不能改变数学,这就是为什么你否决了我的问题,对吗?@tom5363d
告诉编译器将值5363
视为double
,不是正常情况下的int
。是的,我以任何方式投票支持你的答案,你能投票支持我的问题吗