2014-07-26 40 views
-6

是不是数据类型int只用于整数? 10/3是小数,因此是小数。这是否意味着它会产生一个错误?变量的值是什么? int iNum = 10/3

+1

嗯......你为什么不试试看?你可以把一个10/3放入int。只有整个部分存储,即3。 – james

+4

询问之前,你自己试过吗? –

+0

你的意思是“理性”,你写了“小数”。 –

回答

2

这取决于语言。对于您的示例(Java),它将被舍入为零(也称为“截断”操作)。因此,该值变为3.尝试一下自己:

int i = 10/3; 
System.out.println(i); // Displays 3 

int j = -10/3; 
System.out.println(j); // Displays -3 

double k = 10/3; 
System.out.println(k) // Displays 3.00 

double m = ((double)10)/3; 
System.out.println(k) // Displays 3.33 

double m = 10.0/3; 
System.out.println(k) // Displays 3.33 

实际上有两个操作在每种情况下继续。考虑第一个例子,

步骤1: 计算右侧的值[Integer 10]除以[Integer 3]。如上所述,答案是[Integer 3]

第2步: 将此RHS值[Integer 3]指定到左侧。 [Integer 3]分配给[Integer i]。所以我等于3.

因为操作分两步完成,所以使用double的第三个操作也给出了3.00,而不是3.33。在步骤2开始时,精度已经丢失。

+0

它不会被舍入。试用'11/3'。 –

+0

ohh我明白,双重铸造双数据类型,例如:double dNum =(double)(14/5); – cosittos

+1

@AdamArold它被四舍五入为零,但是'11/3 == 3'和'-11/3 == -3' –

1

在代码中,10/3是而不是的一小部分。 Java没有原始分数。

相反,它是代表整数 10由整数 3.由于既不类型会导致促进分裂的浮点划分的表达(即,既不是浮点值/双)然后整数除法使用,其中结果也将是整数

因此在问题中没有浮点类型,结果是3(一个整数,它可直接分配给整数变量)。正如其他人已经指出的那样,这种分裂的结果像“舍入到零”或“截断”操作一样行动