在以下代码段中:
long frameRate = (long)(_frameCounter / this._stopwatch.Elapsed.TotalSeconds);
为什么赋值运算符右边还有一个(长)(...)?
答案 0 :(得分:4)
除法创建双精度浮点值(因为TimeSpan.TotalSeconds
是double
),因此强制转换将结果值截断为积分而不是浮点。你得到一个近似但整数帧的每秒,而不是每秒小数帧的精确答案。
如果frameRate
用于显示或记录,则强制转换可能只是为了使输出看起来更好。
答案 1 :(得分:2)
这是一个显式转换(强制转换),可将除法运算的结果转换为long
。
答案 2 :(得分:0)
因为计算结果与正在使用的变量的类型有关。如果编译器认为结果类型不是long
,因为要对其进行操作,那么您需要转换结果。
请注意,投射结果可能会导致精度或值丢失。括号内的演员(long)
是一个明确的演员,如果您试图将“1.234”放入long
,只能存储“1”,则不会产生任何错误。
答案 3 :(得分:0)
在我看来,可能有几个原因:
long
类型(使读者明白结果类型 - 很有道理)。long
(最好确保,希望,它会起作用)。我相信它是3:)。