假设选项Strict On
; a
和b
- 整数
Dim mySingle as Single = a / b ' implicit conversion error
解决方案 A)
Dim mySingle as Single = CSng(a / b) ' CSng
解决方案 B)
Dim mySingle as Single = a * 1F / b ' x 1F
什么解决方案更可取? 如果性能很重要,采取什么解决方案?
答案 0 :(得分:3)
为了便于阅读和揭示意图,我会选择A:
Dim mySingle as Single = CSng(a / b) ' CSng
使用A,你清楚地说,我知道计算会返回不同的类型,这就是我想要的。
至于性能 - 我运行了一个快速的微基准测试,每个测试100万次迭代,差异在毫秒到亚毫秒级别,与CSing
相比略有优势。不要担心这种转换的性能(当然,您需要自己测试)。
基准代码:
Sub Main()
Dim mySingle As Single
Dim a As Integer = 10
Dim b As Integer = 5
Dim iterations As Integer = 1000000
Dim sw As New Stopwatch()
sw.Start()
For i As Integer = 1 To iterations
mySingle = CSng(a / b) ' CSng '
Next
sw.Stop()
Console.WriteLine(String.Format("CSng(a / b) - {0}", sw.Elapsed))
sw.Reset()
sw.Start()
For i As Integer = 1 To iterations
mySingle = a * 1.0F / b ' x 1F '
Next
sw.Stop()
Console.WriteLine(String.Format(" a * 1.0F / b - {0}", sw.Elapsed))
End Sub