Vb.net CSng()还是x 1F?

Vb.net CSng()还是x 1F?,vb.net,Vb.net,假设选项对严格a和b-整数 Dim mySingle as Single = a / b ' implicit conversion error 解决方案A) 解决方案B) Dim mySingle as Single = a * 1F / b ' x 1F 哪种解决方案更可取? 如果性能很重要,应该采取什么解决方案?为了可读性和揭示意图,我会选择: Dim mySingle as Single = CSng(a / b) ' CSng 使用A,你很清楚地说,我知道计算会返回不同的类

假设选项
严格<代码>a和
b
-整数

Dim mySingle as Single = a / b  ' implicit conversion error
解决方案A)

解决方案B)

Dim mySingle as Single = a * 1F / b  ' x 1F
哪种解决方案更可取?

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

为了可读性和揭示意图,我会选择:

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

为了可读性和揭示意图,我会选择:

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

你从未说过性能是个问题。也许你应该修改你的问题。当然,这可能是其他解决方案,如CSng(a)/b等:)你从未说过性能是一个问题。也许你应该修改你的问题。当然这可能是其他的解决方案,如CSng(a)/b等:)如果你切换到C,解决方案a可能会把你甩了(因为在C中,
int/int
返回一个
int
)如果你切换到C,解决方案a可能会把你甩了(因为在C中,
int/int
返回一个
int