刷脸支付 Java Out Of Memory java 线程池 jquery winforms api shell express jpa cookies dll architecture bitmap uicollectionview alertifyjs vue框架 ios视频教程 git视频教程 click事件 jquery获取最后一个子元素 idea生成main方法 matlab注释一段 less比较级 matlab区分大小写吗 mysql函数 后台管理网站模板 python调用方法 python查找指定字符 java对象 java操作mysql java8教程 java接口开发 java类方法 java接口调用 右键菜单背景 俄罗斯方块java代码 音频频谱分析软件 stl2stp pdf拆分工具 HTML5从入门到精通
当前位置: 首页 > 学习教程  > 编程语言

浮点数float32、float64高精度表示金额问题

2020/7/24 10:22:23 文章标签:

package main

import (
    "fmt"
    "strconv"
    "math/big"
    "github.com/shopspring/decimal"
)

func main() {
    //32位浮点,错误
    var a1,b1,c1 float32
    a1 = 1.69
    b1 = 1.7
    c1 = a1*b1
    fmt.Println(c1)

    //64位浮点,错误
    var a2,b2,c2 float64
    a2 = 1.69
    b2 = 1.7
    c2 = a2 * b2
    fmt.Println(c2)

    //大数据浮点,错误
    a3 := new(big.Float).SetFloat64(1.69)
    b3 := new(big.Float).SetFloat64(1.7)
    c3 := new(big.Float).Mul(a3, b3)
    fmt.Println(c3)

    //高精度,正确
    a4 := decimal.NewFromFloat(1.69)
    b4 := decimal.NewFromFloat(1.7)
    c4 := a4.Mul(b4)
    fmt.Println(c4)

    //四舍五入,正确
    var f float32
    f = 2.872999999
    //精度小数点后4位
    s := fmt.Sprintf("%.4f", f)
    float, _ := strconv.ParseFloat(s, 32)
    f = float32(float)
    fmt.Println(f)
}

输出:

2.8730001
2.8729999999999998
2.8729999999999998
2.873
2.873


本文链接: http://www.dtmao.cc/news_show_50253.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?