2013-04-25 7 views
1

Я новичок в Visual Basic, и я делаю некоторые вычисления с помощью Decimals, однако Visual Studio бросает эту ошибку при каждом вычислении: «Option Strict On запрещает неявные преобразования из« Double »в ' Десятичная дробь'". Я понимаю смысл этой ошибки. Мне просто интересно, почему в первую очередь ответ будет Двойным. Вот код (линия производства ошибки является тот, который читает FWT = 0,1 * (налогооблагаемый - 116)):Visual Basic Decimal Calculations Результат в Double

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 

Я вырезал другие заявления ELSEIF, как все они похожи и довольно немного. Visual Studio рекомендует использовать CDec() для устранения ошибки, поэтому я буду реализовывать это для ее решения (если кто-либо не знает лучшего решения), но я просто пытаюсь понять, почему вычисление с десятичными переменными и буквальными номерами даст Дважды.

+2

Так для '= 0,1 * (налогооблагаемая - 116)', что тип данных вы думаете, что в буквальном '0.1' это? – RBarryYoung

+0

Основываясь на ответе ниже, я понимаю, что букваль интерпретируется как «Двойной», поэтому теперь я вижу, откуда приходит Double. Спасибо! –

ответ

2

0.1 как Decimal или Double?

Мое понимание состоит в том, что литералы будут интерпретироваться как Двойной, и это даст результат Double.

Вы можете попробовать: FWT = 0.1D * (taxable-116)

+0

Я не знал, что литералы по умолчанию равны. Спасибо! –

+0

@ SamanthaMaurice и не я, пока не посмотрел :) Совершенно понятно, потому что Double type используется гораздо чаще и требует меньше памяти для хранения. –