您好,
也许是因为星期五,但我无法理解:
(Double)1/2 = 0.5
(Double)1/(Double)2 = 0.5
(Double)((Double)1/(Double)2) = 0.5
(Double)(1/2) = 0.0
为什么最后一次操作是0? :S
亲切的问候。
答案 0 :(得分:9)
因为1和2是整数。结果是0.如果你把它转换为双,那么它仍然是0.这个问题就在几天前被问过。
答案 1 :(得分:2)
如果你划分两个整数,那么结果也将是int。所以1/2给你一个零,这是一个整数。然后你将0加倍,这仍然是零。
答案 2 :(得分:2)
到目前为止,每个人都给了你正确的答案,我正在添加这个,所以其他读者不要在评论中遗漏它。
使用与常规数学相同的规则。首先是 内括号。 所以在第一个例子中,1在分割发生之前被转换为double,使得结果为double( int和double的分割结果是双)。如果是(Double)1/2
或1/(Double)2
,则为真。所以在最后一个例子(Double)(1/2)
中,首先执行(1/2)
,在int上执行int,得到int。然后(双)将其转换为双倍。希望这不仅可以帮助你,也可以让其他任何人对这个问题充满好奇。我自己已经多次使用了很长的方程式,并且必须将方程式的每个参数都转换为双精度。
答案 3 :(得分:1)
尝试(双倍)(1.0 / 2.0) - 这将给出你期望的答案。
答案 4 :(得分:1)
如前所述,问题在于类型。您可以使用suffixes确保类型正确无误:
1d/2d=0.5
答案 5 :(得分:1)
(Double)1/2 = 0.5
(Double)1/(Double)2 = 0.5
(Double)((Double)1/(Double)2) = 0.5
(Double)(1/2) = 0.0
在前三种情况下,您将整数值(当您不使用后缀或不包含点时,thas是数字的默认类型)转换为Double,然后在第一种情况下使用整数值进行除法,并使用double作为2 3,与最后(4)情况相反,括号更改操作顺序首先划分两个整数,然后将结果转换为Double。