java中的不同结果如何才能得到纠正

时间:2012-02-23 11:13:48

标签: java math

简单计算在java中给出了不同的结果。

int a=5363/12*5;

out.println(a);// result is 2230 

但实际上结果应为2234.5

如何纠正这个java结果?

8 个答案:

答案 0 :(得分:6)

两个问题:

  1. 表达式5363/12*5给出整数结果(特别是除法是整数)。
  2. 变量a的类型为int(整数)。
  3. 修复:

    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.此外,您的变量aint,它只能保持整数值。

要解决此问题,您需要做两件事。将a的类型更改为小数类型,例如floatdouble 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(一);