CSng()还是x 1F?

时间:2010-06-24 20:29:01

标签: vb.net

假设选项Strict On; ab - 整数

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

什么解决方案更可取? 如果性能很重要,采取什么解决方案?

1 个答案:

答案 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