隐式强制转换会产生不正确的结果

本文关键字:不正确 结果 转换 | 更新日期: 2024-11-01 04:22:18

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

请考虑以下事项

  1 * (2/(1+2))
  equals 0
  1 * ((double)2/(1+2))
  equals 0.6667

隐式强制转换会产生不正确的结果

这不是

一个错误。算术运算,其中所有操作数都int产生int结果。
MSDN 中也记录了这一点:

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

关系,因为你已经在表达式中使用了整数。您可以使用双操作数代替强制转换:

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

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

如果要获得以下格式的结果,则应使用双精度/浮点数:

1 * (2.0/(1+2))

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

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