Vba Visual Basic十进制计算结果为双精度

Vba Visual Basic十进制计算结果为双精度,vba,visual-studio-2012,Vba,Visual Studio 2012,我是Visual Basic新手,我正在使用小数进行一些计算,但是Visual Studio在每次计算时都会抛出此错误:“Option Strict on不允许从“Double”到“Decimal”的隐式转换”。我理解这个错误的含义。我只是想知道为什么一开始答案会是双倍的。下面是代码(产生错误的行是读取FWT=0.1*(应纳税-116))的行): 私有函数GetFWT(ByVal容差为整数,ByVal状态为字符串,ByVal总值为十进制)为十进制 将FWT设置为十进制 十进制 应税=毛额-CDe

我是Visual Basic新手,我正在使用小数进行一些计算,但是Visual Studio在每次计算时都会抛出此错误:“Option Strict on不允许从“Double”到“Decimal”的隐式转换”。我理解这个错误的含义。我只是想知道为什么一开始答案会是双倍的。下面是代码(产生错误的行是读取FWT=0.1*(应纳税-116))的行):

私有函数GetFWT(ByVal容差为整数,ByVal状态为字符串,ByVal总值为十进制)为十进制
将FWT设置为十进制
十进制
应税=毛额-CDec(免税额*70.19)
如果status=“S”,则
如果应纳税<116,则
FWT=0
否则,如果应税>=116且应税<200,则
FWT=0.1*(应税-116)
如果结束
如果结束
端函数

我删掉了其他的ElseIf语句,因为它们都很相似,而且有很多。Visual Studio建议使用CDec()来解决错误,因此我将实现CDec()来解决它(除非有人知道更好的解决方案),但我只是想了解为什么使用十进制变量和文字数字的计算会产生双精度。

0.1
作为
Decimal
还是
Double

我的理解是,文本将被解释为Double,这将产生一个
Double
结果


你可以试试:
FWT=0.1D*(应税-116)

那么对于
=0.1*(应税-116)
你认为文本
0.1
是什么数据类型?根据下面的答案,我现在理解文本被解释为双精度,所以我现在知道双精度来自哪里了。非常感谢。我不知道文本在默认情况下是双精度的。谢谢大家!@SamanthaMaurice我也不知道,直到我查了一下:)才有了完美的解释,因为Double type的使用频率更高,存储所需的内存也更少。
Private Function GetFWT(ByVal allowances As Integer, ByVal status As String, ByVal gross As Decimal) As Decimal

    Dim FWT As Decimal
    Dim taxable As Decimal

    taxable = gross - CDec(allowances * 70.19)

    If status = "S" Then
        If taxable < 116 Then
            FWT = 0
        ElseIf taxable >= 116 And taxable < 200 Then
            FWT = 0.1 * (taxable - 116)
        End If
    End If

End Function