Java变量赋值为double。为什么价值转换为双倍?

时间:2015-12-27 20:21:35

标签: java

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转换为双?这是变量类型对值的作用吗?我以为双打可以保持整数?

5 个答案:

答案 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;

它不会那样做。我想你现在知道为什么。