2017-09-15 64 views
0

有人可以向我解釋以下內容嗎?意外的舍入錯誤

Sub TestCalc() 
    Dim Z As Double 
    Dim Y As Double 
    Dim X As Integer 
    Dim W As Double 
    Dim V As Double 
    X = 44/14       ' returns 3 
    Z = (0.14 * 14)      ' returns 1.96 
    Y = ((44/14) - (44 \ 14)) * 14 ' returns 2 SHOULD RETURN 1.96 
    W = (44/14) - X     ' returns 0.142857142857143 
    V = W * 14       ' returns 2 SHOULD RETURN 1.96 
End Sub 

1.96是我期望從代碼中獲得的值。但是,當我使用硬編碼值時,我只能得到這個值。如果我使用變量將其舍入並返回值2(Y或V)。我需要理解爲什麼,因爲我希望返回的值是1.96。我需要確保它正確執行此計算,以確保我的數學公式在我的主要過程中正常運行

+1

你期望'1.96'在哪裏? 'V''。請更具體一些。 – UGP

+0

@UGP我會期望變量Y或V中的任一個的最終值返回1.96而不是返回值爲2的值 –

回答

3

您的期望不正確。

0.14 * 14 = 1.96;然而,W是0.142857142857143 - 該值* 14 = 2.

0

我猜測有一些看不見的條件可以確定您輸入的數字是以整數還是雙精度計算的。當您輸入Y作爲 Y = ((44.0/14.0) - (44.0 \ 14.0)) * 14.0 或您可以在Visual Basic中指定雙精度時會發生什麼情況。

此外,本文的底部提到了一種模式,可在不安全的轉換髮生時提醒您,以幫助進行跟蹤。 https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/arithmetic-operators

+0

我的變量顯式定義爲double。我也嘗試將它們設置爲變體,它沒有區別。 –