商城首页欢迎来到中国正版软件门户

您的位置:首页 >Go 语言四舍五入到四位小数的实现方法

Go 语言四舍五入到四位小数的实现方法

  发布于2026-04-18 阅读(0)

扫一扫,手机访问

Go 中实现浮点除法与小数位控制(四舍五入到4位小数)

本文详解如何在 Go 语言中正确执行浮点除法运算,并使用格式化输出将结果精确控制在 4 位小数(自动四舍五入),避免整数除法导致的精度丢失。

本文详解如何在 Go 语言中正确执行浮点除法运算,并使用格式化输出将结果精确控制在 4 位小数(自动四舍五入),避免整数除法导致的精度丢失。

在 Go 中,int / int 运算默认执行整数除法,结果直接截断小数部分(非四舍五入),例如 190 / 13 得到 14,而非 14.6153...。若需保留小数精度,必须显式将操作数转换为浮点类型(如 float64),再进行运算,并通过 fmt.Printf 的动词格式控制输出精度。

✅ 正确做法:类型转换 + 格式化输出

核心修改仅两处:

  • 将整数 q 和 w 转换为 float64 再相除:float64(q) / float64(w)
  • 使用 fmt.Printf("%.4f\n", slope) 输出——%.4f 表示保留 4 位小数并自动四舍五入(不是截断)

以下是完整、健壮的修正代码:

package main

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

func main() {
    scanner := bufio.NewScanner(os.Stdin)

    fmt.Print("Insert y value: ")
    if !scanner.Scan() {
        fmt.Println("Error reading y")
        return
    }
    yStr := scanner.Text()

    fmt.Print("Insert x value: ")
    if !scanner.Scan() {
        fmt.Println("Error reading x")
        return
    }
    xStr := scanner.Text()

    y, err := strconv.Atoi(yStr)
    if err != nil {
        fmt.Printf("Invalid y input: %v\n", err)
        return
    }

    x, err := strconv.Atoi(xStr)
    if err != nil {
        fmt.Printf("Invalid x input: %v\n", err)
        return
    }

    if x == 0 {
        fmt.Println("Error: division by zero")
        return
    }

    slope := float64(y) / float64(x)
    fmt.Printf("%.4f\n", slope) // 自动四舍五入至小数点后4位
}

⚠️ 注意事项

  • 不要复用同一 err 变量:原代码中两次 strconv.Atoi(...) 共享 err,后一次会覆盖前一次错误,导致无法准确判断哪个输入出错。应分别处理或使用新变量。
  • 零除保护:务必检查除数是否为 0,否则运行时 panic。
  • 输入扫描优化:使用单个 bufio.Scanner 更安全高效;多次创建 Scanner 可能因缓冲区竞争导致读取异常。
  • %.4f 是四舍五入(rounding),非截断(truncation)。例如 190.0/13.0 = 14.615384... → 输出 14.6154(第5位是8,进位)。

✅ 验证示例

输入:

Insert y value: 190
Insert x value: 13

输出:

14.6154

该方案简洁、安全、符合 Go 最佳实践,适用于所有需要高精度商值显示的场景。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注