int i, j, k;
double a, b, c;
以下一系列陈述是正确的:
i = 3;
a = i + 5;
b = 12 / a;
c = i + b;
c = c - b;
j = 12 / 3;
a = 12 / 3;
b = 13 / 3;
// a gets the value 8.0
// b gets the value 1.5
// c gets the value 4.5
// c now gets the value 3.0
// j gets the value 4;
// a gets the value 4.0
// b gets the value 4.0!
在最后一行,为什么b得到4.0的值? Java中的13/3是不是4?为什么4转换为双?这是变量类型对值的作用吗?我以为双打可以保持整数?
答案 0 :(得分:3)
这里的内容名为assignment conversion。
当表达式的值为时,发生分配转换 赋值给变量:表达式的类型必须是 转换为变量的类型。
分配上下文允许使用以下之一:
身份转换
扩大基元转换
扩大参考转化
一个拳击转换,可选地后跟一个加宽的引用转换
一个拆箱转换,可选择后跟一个加宽的基元转换。
在这种情况下,您的作业需要将表达式的值转换为double
,因为这是作业目标的类型。所需的转换为widening primitive conversion,它将表达式的值更改为具有包含该值的更宽范围的类型。
从int
转换为double
时,您不会失去精确度(double
可以保存int
类型的所有值,包括其所有数字, float
不能)。但这并不意味着价值仍然是int
。它已转换为代表相同值的double
。
X
类型的变量永远不能保存X
以外的任何类型的值(多态除外,但不适用于int
和{{1等基本类型}})。
答案 1 :(得分:0)
它像这样工作
b = 13/3 => b = int / int。因此它需要13/3 int然后将其转换为double。
如果你想要正确,你应该像b =(double)13 /(double)3;
那样做答案 2 :(得分:0)
因为在13/3
中,两个值都是整数,所以计算以整数运算完成并产生(整数)值4.由于b只能保存双精度值,因此它被赋予(双)值4,这取决于在您显示该值的方法将显示为4.0
答案 3 :(得分:0)
分配时精度已经消失。
你需要施展加倍
b = ((double)13)/3
答案 4 :(得分:0)
如果你写:
b = (double)13 / 3;
或
b = 13. / 3;
它不会那样做。我想你现在知道为什么。