【问题标题】:What is the value of the variable? int iNum = 10/3 [closed]变量的值是多少? int iNum = 10/3 [关闭]
【发布时间】:2014-09-18 12:33:14
【问题描述】:

数据类型 int 不是只用于整数吗? 10/3 是分数,因此是小数。这是否意味着它会产生错误?

【问题讨论】:

  • 嗯...你为什么不试试看呢?您可以将 10/3 放入 int。只存储整个部分,即 3。
  • 问之前有没有自己试过?
  • 你的意思是“理性”,你写的是“十进制”。

标签: java types int double primitive-types


【解决方案1】:

这取决于语言。对于您的示例(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]。所以 i 等于 3。

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

【讨论】:

  • 不会四舍五入。试试11/3
  • @AdamArold 舍入为零,但11/3 == 3-11/3 == -3
  • @atomicno6 转换不会改变14/5 = 2 转换为double 的结果现在是2.0 你需要的是(double) 14/5 = 14.0/5 = 2.8
  • 四舍五入与舍弃小数点后的数字基本相同。
  • 您对“地板”一词的使用不正确。 "Floor" 总是 产生一个数字,即操作数 <=,即 floor(-3.1) 为 -4。它与向零舍入不同。 +1 为你的第三个例子,它绊倒了很多人。
【解决方案2】:

在代码中,10/3 不是分数。 Java 没有原始分数。

相反,它是表示 integer 10 除以 integer 3 的表达式。由于这两种类型都不会导致除法提升为浮点数(即两者都不是a float/double) 然后使用 integer 除法,结果也将是一个 integer

因此问题中没有浮点类型,结果为 3(一个 整数,可直接分配给整数变量)。正如其他人指出的那样,这种除法的结果作用类似于“舍入为零”或“截断”操作。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2023-03-13
    • 2012-06-08
    • 2013-03-12
    相关资源
    最近更新 更多