2016-08-04 69 views
1

我剛剛開始學習Go,並試圖將字符串從標準輸入轉換爲float64,以便可以對輸入值執行算術運算。使用Golang中的ParseFloat將字符串輸入轉換爲float64

無論輸入值如何,輸出返回「0英尺轉換爲米給你0米」。在輸入中調用ParseFloat後,我無法弄清楚爲什麼值爲零。

如果有人可以請指出爲什麼發生這種情況,我將不勝感激。

const conversion float64 = 0.3048 

func feetToMeters (feet float64) (meters float64) { 
    return feet * conversion 
} 

func main(){ 
    fmt.Println("\n\nThis program will convert feet to meters for you!\n") 

    reader := bufio.NewReader(os.Stdin) 
    fmt.Println("Enter feet value: \n") 
    feet, _ := reader.ReadString('\n') 

    feetFloat, _ := strconv.ParseFloat(feet, 64) 

    meters := feetToMeters(feetFloat) 

    fmt.Printf("%v feet converted to meters give you %v meters",feetFloat,meters) 
} 
+0

'FUNC的main(){ fmt.Println( 「!\ n \ n該程序將英尺轉換爲米爲你\ n」) 腳:= 「35」 feetFloat,_:= strconv.ParseFloat(英尺64) 米:= feetToMeters(feetFloat) fmt.Printf( 「轉換爲米%v腳給您%v米」,feetFloat,米) }'我修改這一點,它給了我正確的答案。問題應該與讀者一起。如果你'fmt.Println(英尺)'會發生什麼? – jonathanGB

+4

處理從reader.ReadString和strconv.ParseFloat返回的錯誤。這些錯誤可能會提供有關該問題的一些見解。 –

+1

謝謝@jonathanGB,現在我意識到它還打印了一個新的字符。 – efettero

回答

7

的問題是,你試圖解析"x.x\n",e.g:1.8\n。這會返回一個錯誤:strconv.ParseFloat: parsing "1.8\n": invalid syntax。你可以做一個strings.TrimSpace功能或轉換feet[:len(feet)-1]刪除\n字符

隨着strings.TrimSpace()(您需要導入strings包):

feetFloat, _ := strconv.ParseFloat(strings.TrimSpace(feet), 64) 

Wtih feet[:len(feet)-1]:在這兩種情況下

feetFloat, _ := strconv.ParseFloat(feet[:len(feet)-1], 64) 

輸出:

10.8 feet converted to meters give you 3.2918400000000005 meters 
+1

謝謝託尼,我甚至沒有想到這個字符串中有一個新的字符。我感謝你給我兩個解決方案! – efettero

+0

歡迎您。我很高興我能幫你:-) –

相關問題