登录
首页 >  Golang >  Go问答

添加 float64 值,结果小数值消失

来源:stackoverflow

时间:2024-03-17 09:45:22 341浏览 收藏

在 Go 语言中,使用默认格式打印 float64 值时,可能会导致小数值消失。这是因为默认格式(%v)使用最少必要位数来唯一标识该值,这可能导致舍入小数部分。 为了避免这个问题,可以指定替代格式,例如 %f 或 %g。%f 格式将打印小数点后指定数量的小数位,而 %g 格式将根据值的幅度自动选择指数或浮点表示法。通过使用这些替代格式,可以确保以所需精度打印 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))
    
}

解决方案


当您打印该值时,它使用默认表示形式。来自fmt documentation

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:

今天关于《添加 float64 值,结果小数值消失》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>