Vb.net + SQL Server:使用float vs Decimal的速度差异

时间:2014-09-17 22:29:56

标签: vb.net

我使用的是VB.net 2013和SQL Server 2008R2。

我正在编写财务应用程序,而且我不确定要使用哪种数据类型。

我知道十进制比float更精确,但我读到使用十进制可以显着降低计算速度,因此我的应用程序的速度。 我读到使用小数可能比使用float慢20倍。 这是真的,如果是,是否有解决方案或我应该继续使用浮动?

谢谢!

1 个答案:

答案 0 :(得分:4)

对财务应用程序使用小数,期间。在这种情况下,速度无关紧要。当钱丢失时,您的用户将不会感到高兴。你不能争辩说“好吧,但另一方面,它很快”。关于浮动与小数的20倍差异,相信我,你根本不会感觉到它,你的应用程序的性能会有更多的主要因素。最有可能尝试在彼此之间同步事务,数据库锁等等。

编辑: Regarding 20 times performance difference,这是真的,我能够使用以下代码重现:

Module Module1

  Sub Main()
    Dim f As Single = 123456792.0F
    Dim fsw As New Stopwatch
    fsw.Start()
    For i = 1 To 100000000
      f *= 1.00000012F
    Next
    fsw.Stop()

    Dim dsw As New Stopwatch
    dsw.Start()
    Dim d As Decimal = 123456792.0F
    For i = 1 To 100000000
      d *= 1.00000012F
    Next
    dsw.Stop()

    Console.WriteLine(f)
    Console.WriteLine("Float (ms): " & fsw.ElapsedMilliseconds)
    Console.WriteLine(d)
    Console.WriteLine("Decimal (ms): " & dsw.ElapsedMilliseconds)
    Console.WriteLine("Float is " & dsw.ElapsedMilliseconds / fsw.ElapsedMilliseconds & " faster")

    Console.ReadLine()
  End Sub

End Module

输出:

enter image description here

在编写此代码时,对于不同的数字,我得到了10到20次。正如我之前提到的,速度不是问题,比较两种方法的准确性,注意浮动如何偏离几个数量级。当然,这是一个合成的例子,但它显示了人们如何在工资单上花1美元而不是1000美元 - 想象一下这种反应。