代码之家  ›  专栏  ›  技术社区  ›  serhio

CSng()还是x 1F?

  •  0
  • serhio  · 技术社区  · 15 年前

    假设选项 Strict On a b -整数

    Dim mySingle as Single = a / b  ' implicit conversion error
    

    (一)

    Dim mySingle as Single = CSng(a / b)  ' CSng
    

    解决方案

    Dim mySingle as Single = a * 1F / b  ' x 1F
    

    什么解决方案更可取?
    如果 演出 重要吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   serhio    15 年前

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

    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