2014-10-11 74 views
0

你好,我試圖將英寸轉換爲釐米,英里和英尺轉換正確,但釐米返回值爲0.任何意見,爲什麼我可能會遇到這個問題?VB將長度從英制轉換爲公制

Dim totalInches, totalMeters As Long 
    Dim km, m As Double 
    Dim cm As Decimal 
    Dim result As String 

    totalInches = 63360 * miles + 36 * yards + 12 * feet + inches 
    totalMeters = totalInches/39.37 
    km = Int(totalMeters/1000) 
    m = Int(totalMeters - (km * 1000)) 
    cm = (totalMeters - (km * 1000) - m) * 100 

    result = "The Metric Length is:" + vbNewLine _ 
     + km.ToString + " Kilometers" + vbNewLine _ 
     + m.ToString + " Meters" + vbNewLine _ 
     + cm.ToString + " Centimeters"  
+1

在VB'+'是數學和'&'是用於連接字符串。 – OneFineDay 2014-10-11 20:43:48

+0

正如你現在的代碼所示,「英里數」,「碼數」,「英尺數」和「英寸數」都未申報,所以這甚至不能編譯。如果它們被聲明在其他地方但未設置,那麼你的輸出將爲0. – 2014-10-11 20:44:24

+0

@OneFineDay:VB .net允許或者嘗試它:Dim a As String =「abc」Dim b As String =「def」Debug.Print a + b)' – 2014-10-11 20:50:26

回答

1

當您在totalInches和常量39.37之間進行劃分時,您正在使用長整數。這有效地截斷了結果的小數部分。

當然,如果您在項目屬性中使用Option Strict On,那麼您將永遠不會發生此錯誤,因爲您的代碼無法編譯。

在這兩種情況下,你需要兩個變化

Public Function ConvertImperialToMetric(miles as Integer, yards as Integer, feet as Integer, inches as Integer) as String 

    Dim totalInches as Long 

    ' totalMeters should be a double 
    Dim totalMeters As Double 
    Dim km, m As Double 
    Dim cm As Double 
    Dim result As String 

    totalInches = 63360 * miles + 36 * yards + 12 * feet + inches 

    ' With totalMeters as Double you don't loose the decimal part of the division 
    totalMeters = totalInches/39.37 
    km = Int(totalMeters/1000) 
    m = Int(totalMeters - (km * 1000)) 
    cm = (totalMeters - (km * 1000) - m) * 100 

    result = "The Metric Length is:" + vbNewLine _ 
     + km.ToString + " Kilometers" + vbNewLine _ 
     + m.ToString + " Meters" + vbNewLine _ 
     + cm.ToString + " Centimeters"  
    return result 
End Function   
+0

謝謝史蒂夫,感謝您的幫助。我也感謝你將Option Strict設置爲ON的建議。 – dj1997 2014-10-12 14:20:21

+0

很高興能有所幫助。作爲網站的新用戶,如果此答案已解決您的問題,我建議您閱讀[如何接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-答案工作) – Steve 2014-10-12 14:22:52