你会认为这是一个错误,还是预期的行为?
考虑以下
1 * (2/(1+2))
equals 0
1 * ((double)2/(1+2))
equals 0.6667
答案 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))