我正在使用 VB.net 2013 和 SQL Server 2008R2。
我正在编写一个财务应用程序,但不确定要使用哪种数据类型。
我知道小数比浮点更精确,但我读到使用小数会显着降低计算速度,因此会降低我的应用程序的速度。我读到使用小数可能比使用浮点数慢 20 倍。这是真的吗?如果是的话,有解决方案吗?或者我应该继续使用 float 吗?
谢谢 !
对于金融应用程序,请使用小数。在这种情况下,速度并不重要。当金钱损失时,您的用户不会高兴。你不能说“好吧,但另一方面,它很快”。关于浮点数和小数点的 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 美元 - 想象一下反应。