你会认为这是一个错误,还是预期的行为?
考虑以下
1 * (2/(1+2))
equals 0
1 * ((double)2/(1+2))
equals 0.6667
这不是错误。所有操作数都为结果int
的算术运算。
这也记录在 MSDN 中:int
当你将两个整数相除时,结果总是一个整数。例如,7 / 3 的结果是 2。要确定 7 / 3 的余数,请使用余数运算符 (%)。要获得作为有理数或分数的商,请给出被除数或除数类型 float 或类型 double。您可以通过将数字放在小数点右侧将被除数或除数表示为小数来隐式执行此操作
没关系,因为您在表达式中使用了整数。您可以使用双操作数而不是强制转换:
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))