首页 > 解决方案 > 添加 float64 值,结果的小数值消失

问题描述

package main


import (
  "fmt"
  "os"
  "bufio"
  "strconv"
)

func main() {

    var _ = strconv.Itoa 
  
    var d float64 = 4.0

    scanner := bufio.NewScanner(os.Stdin)

    var b float64
   
    scanner.Scan()

    b, _ = strconv.ParseFloat(scanner.Text(), 64)
  
    fmt.Println(float64(d + b))
    
}

标签: go

解决方案


当您打印值时,它使用默认表示。从fmt文档中:

The default format for %v is:
  ...
  float32, complex64, etc: %g
  ...

The default precision for ... %g it is the smallest number of digits necessary
to identify the value uniquely.

这是您修改的代码以证明这一点:

package main

import (
  "fmt"
  "os"
  "bufio"
  "strconv"
)

func main() {
    var d float64 = 4.0
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Printf("Enter a number: ")
        scanner.Scan()
        b, err := strconv.ParseFloat(scanner.Text(), 64)
        if err != nil {
            fmt.Println(err)
            continue
        }
        result := b + d
        fmt.Println("\nResult:")
        fmt.Printf("\t%%v: %v\n", result)
        fmt.Printf("\t%%g: %g\n", result)
        fmt.Printf("\t%%f: %f\n\n", result)
    }
}

$ go run test.go
Enter a number: 5

Result:
        %v: 9
        %g: 9
        %f: 9.000000

Enter a number: 5.5

Result:
        %v: 9.5
        %g: 9.5
        %f: 9.500000

Enter a number: 7.8910

Result:
        %v: 11.891
        %g: 11.891
        %f: 11.891000

Enter a number:

推荐阅读