go - 添加 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
文档中:
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:
推荐阅读
- java - ROME API 从 RSS 源解析 CDATA 中的图像 URL
- javascript - 将客户端验证代码添加到 .jss 文件中
- sql - 试图计算投诉、原因、更正的数量
- xml - XSD 全部里面的选择
- docker - Redis Windows 错误:连接 ECONNREFUSED 127.0.0.1:6379 但应用程序正在运行
- java - 我们是否允许分发早期访问 JDK 构建生成的代码?
- python - Python - put_item() S3、Lambda、DynamoDB -- 发生错误 (ValidationException)
- rust - 当 Rust FFI 函数将没有 #[repr(C)] 的结构返回给 C 时,会返回什么?
- vue.js - vue.js bootstrap-datepicker 没有改变值
- python - 在启动时运行与 Django 应用程序并行的脚本(manage.py runserver)