Vb.net + SQL Server:使用浮点与十进制的速度差异

ale*_*lex 1 vb.net

我正在使用 VB.net 2013 和 SQL Server 2008R2。

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

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

谢谢 !

Neo*_*isk 5

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

编辑: 关于 20 倍的性能差异,这是真的,我能够用下面的代码重现:

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
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

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