Golang比较浮点数,运算

时间:2019-07-08作者:klpeng分类:IT综合浏览:6723评论:0

Golang浮点数比较和运算会出现误差,我们来看看下面的例子:

package main

import "fmt"

func main(){

	var a float64=1.5
	var b float64=1.3
	var result float64=a-b

	if result==0.2 {
		fmt.Println("相等")
	}else{
		fmt.Println("不相等")
	}

	fmt.Printf("%.20f\n ",result)

	//浮点数运算后,转换成int64位
	var c float64 = 78.6
	fmt.Println(int64(c *100))

}

执行结果是:

Golang比较浮点数,运算

很明显,结果不是我们想要的, 运算的误差导致程序不按照我们的逻辑走,所以可以的话,尽量不要比较浮点数,

浮点数的运算和比较,可以使用第三方扩展包来实现:

go get github.com/shopspring/decimal

安装后,我们来看如何解决上面的问题:

package main

import (
	"fmt"
	"github.com/shopspring/decimal"
	"reflect"
)

func main() {

	num1:=decimal.NewFromFloat(1.5)
	num2:=decimal.NewFromFloat(1.3)
	num3:=decimal.NewFromFloat(0.2)

	result:=num1.Sub(num2) //num1 - num2
	fmt.Println(result,reflect.TypeOf(result))
	//比较是否相等
	if result.Cmp(num3)==0 {
		fmt.Println("相等!")
	}else{
		fmt.Println("不相等!")
	}

	num4:=decimal.NewFromFloat(78.6)
	num5:=decimal.NewFromFloat(100)
	result=num4.Mul(num5) //num4*num5
	fmt.Println("结果是:",result.String())

}

运行结果如下:

Golang比较浮点数,运算

 

 

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢