2016-08-04 5 views
1

私はちょうどGoを学習し始めました。標準入力からfloat64に文字列を変換しようとしていますので、入力値に対して算術演算を実行できます。GolangのParseFloatを使って文字列入力をfloat64に変換

出力値は、入力値にかかわらず、「0フィートはメートルに変換されます」と返します。私は、入力でParseFloatを呼び出した後に値がゼロである理由を理解できません。

誰かがなぜ私にこのことが起こっているのかを指摘できたら、私はそれを高く評価します。 1.8\n

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メイン(){ fmt.Println( "!\ N \ nこのプログラムはあなたのためメートルに足を変換します\ n" は) フィート:= "35" feetFloat、_:= strconv.ParseFloat(フィート、64) メートル:=のfeetToMeters(feetFloat)は fmt.Printf( "メートルに換算%のVの足があなた%のVメーターを与える"、feetFloatは、メートル) } '私は、このように変更し、それは私に正しい答えを与えます。問題は読者にあるべきです。あなたが 'fmt.Println(feet)'の場合はどうなりますか? – jonathanGB

+4

reader.ReadStringおよびstrconv.ParseFloatから返されたエラーを処理します。このエラーは、この問題に関するいくつかの洞察を提供するかもしれません。 –

+1

@jonathanGBありがとう、私は今それが新しい行の文字を同様に印刷していたことを認識します。 – efettero

答えて

7

問題は"x.x\n"、例えばを解析しようということです。そして、これはエラー:strconv.ParseFloat: parsing "1.8\n": invalid syntaxを返します。あなたは(あなたがstringsパッケージをインポートする必要があります)strings.TrimSpace機能を行うことができますかstrings.TrimSpace()\n文字

を削除するfeet[:len(feet)-1]を変換する:

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

ありがとうトニー、私は文字列に改行文字があるという事実についても考えなかった。私はあなたに2つの解決策をくれてありがとう! – efettero

+0

ようこそ。私はあなたを助けてうれしいです:-) –

関連する問題