隐式转换产生错误的结果

时间:2012-08-08 05:46:01

标签: c#

你会认为这是一个错误,还是预期的行为?

考虑以下

  1 * (2/(1+2))

  equals 0

  1 * ((double)2/(1+2))

  equals 0.6667

3 个答案:

答案 0 :(得分:3)

这不是错误。所有操作数均为int的算术运算结果为int 这也是documented in the MSDN

  

分割两个整数时,结果始终为整数。例如,7/3的结果是2.要确定7/3的余数,请使用余数运算符(%)。要获得商作为有理数或分数,请给予被除数或除数类型float或double类型。您可以通过在小数点右侧放置一个数字将股息或除数表示为小数来隐式执行此操作

答案 1 :(得分:1)

没关系,因为你在表达式中使用了int。 您可以使用双操作数而不是强制转换:

1d * (2d/(1d+2d))

这是链接:http://msdn.microsoft.com/en-us/library/678hzkk9(v=vs.71).aspx

答案 2 :(得分:1)

如果您希望得到以下格式的结果,则应使用double / float数字:

1 * (2.0/(1+2))

1 * (2f/(1+2))

1 * (2d/(1+2))