最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang 比較浮點(diǎn)數(shù)的大小方式

 更新時(shí)間:2021年05月01日 14:50:29   作者:愛了李召君  
這篇文章主要介紹了golang 比較浮點(diǎn)數(shù)的大小方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

Golang浮點(diǎn)數(shù)比較和運(yùn)算會(huì)出現(xiàn)誤差。

浮點(diǎn)數(shù)儲(chǔ)存至內(nèi)存中時(shí),2的-1、-2……-n次方不能精確的表示小數(shù)部分,所以再把這個(gè)數(shù)從地址中取出來進(jìn)行計(jì)算就出現(xiàn)了偏差。

package main
import (
	"errors"
	"fmt"
	"github.com/shopspring/decimal"
)
func FloatCompare(f1, f2 interface{}) (n int, err error) {
	var f1Dec, f2Dec decimal.Decimal
	switch f1.(type) {
	case float64:
		f1Dec = decimal.NewFromFloat(f1.(float64))
		switch f2.(type) {
		case float64:
			f2Dec = decimal.NewFromFloat(f2.(float64))
		case string:
			f2Dec, err = decimal.NewFromString(f2.(string))
			if err != nil {
				return 2, err
			}
		default:
			return 2, errors.New("FloatCompare() expecting to receive float64 or string")
		}
	case string:
		f1Dec, err = decimal.NewFromString(f1.(string))
		if err != nil {
			return 2, err
		}
		switch f2.(type) {
		case float64:
			f2Dec = decimal.NewFromFloat(f2.(float64))
		case string:
			f2Dec, err = decimal.NewFromString(f2.(string))
			if err != nil {
				return 2, err
			}
		default:
			return 2, errors.New("FloatCompare() expecting to receive float64 or string")
		}
	default:
		return 2, errors.New("FloatCompare() expecting to receive float64 or string")
	}
	return f1Dec.Cmp(f2Dec), nil
}
func main() {
	a:=4.0
	b:="4"
	fmt.Println(FloatCompare(a,b))
}

補(bǔ)充:golang 判斷2個(gè)浮點(diǎn)型數(shù)字是否相同

判斷2個(gè)浮點(diǎn)型數(shù)字是否相同的方法(假定整數(shù)部分+小數(shù)點(diǎn)后3位相同,則視為相同)

首先將2個(gè)浮點(diǎn)型數(shù)字轉(zhuǎn)換為string數(shù)據(jù)

將float類型的數(shù)據(jù)轉(zhuǎn)換成string

func Decimal(value float32) string {
   value1 := fmt.Sprintf("%.6f", value)
   return value1
}

比較兩個(gè)由float型數(shù)據(jù)轉(zhuǎn)化成string的數(shù)據(jù)是否相同是否相同

func Compare(val1,val2 string) bool {
   indexf :=strings.Index(val1,".") + 4
   indexs :=strings.Index(val2,".") + 4
   if indexs != indexf {
      return false
   }else {
      if val1[0:indexf] == val2[0:indexs]{
         return true
      }else {
         return false
      }
   }
}

補(bǔ)充:golang 浮點(diǎn)數(shù)操作

數(shù)據(jù)庫中金額元存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)使用的是decimal(15,2),golang中使用float64保存變量?jī)?nèi)容。通過轉(zhuǎn)換將 float64 -> int64

最簡(jiǎn)單的方式:int64(float64 * 100),但是由于浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)的表示方式問題導(dǎo)致有一部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)問題,

例如:

var v = 67.6  
fmt.Println(int64(v *100)) 輸出結(jié)果為:6759
 

解決方法:

使用"github.com/shopspring/decimal"包,將對(duì)浮點(diǎn)數(shù)進(jìn)行精確計(jì)算,例如:

f1 := decimal.NewFromFloat(v)
f2 := decimal.NewFromFloat(100)
fmt.Println(f1.Mul(f2).IntPart()) 輸出結(jié)果為6760

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go語言字符串拼接方式與性能比較分析

    Go語言字符串拼接方式與性能比較分析

    這篇文章主要為大家介紹了Go語言字符串拼接方式與性能比較示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 一文介紹Go語言中的指針

    一文介紹Go語言中的指針

    指針是一個(gè)存儲(chǔ)變量?jī)?nèi)存地址的變量,本文主要介紹了Go語言中的指針,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • go?goquery網(wǎng)頁解析實(shí)現(xiàn)示例

    go?goquery網(wǎng)頁解析實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了go?goquery網(wǎng)頁解析實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Golang Recover處理錯(cuò)誤原理解析

    Golang Recover處理錯(cuò)誤原理解析

    Golang 中的?recover?是一個(gè)鮮為人知但非常有趣和強(qiáng)大的功能,讓我們看看它是如何工作的,以及在 Outreach.io 中如何利用它來處理 Kubernetes 中的錯(cuò)誤
    2023-12-12
  • golang+vue打造高效多語言博客系統(tǒng)的完整指南

    golang+vue打造高效多語言博客系統(tǒng)的完整指南

    這篇文章主要為大家詳細(xì)介紹了如何使用golang和vue打造一個(gè)高效多語言博客系統(tǒng),本文為大家附上了完整版指南,有需要的小伙伴可以參考一下
    2025-03-03
  • Golang中Json的序列化和反序列化的使用

    Golang中Json的序列化和反序列化的使用

    本文主要介紹了Golang中Json的序列化和反序列化的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 快速升級(jí)Go版本(幾分鐘就搞定了)

    快速升級(jí)Go版本(幾分鐘就搞定了)

    go現(xiàn)在的更新速度是非常的快啊,用著用著網(wǎng)上的教程就不配套了,下面這篇文章主要給大家介紹了關(guān)于快速升級(jí)Go版本的相關(guān)資料,文中介紹的方法幾分鐘就搞定了,需要的朋友可以參考下
    2024-05-05
  • Golang?流水線設(shè)計(jì)模式實(shí)踐示例詳解

    Golang?流水線設(shè)計(jì)模式實(shí)踐示例詳解

    這篇文章主要為大家介紹了Golang?流水線設(shè)計(jì)模式實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 詳解Go如何基于現(xiàn)有的context創(chuàng)建新的context

    詳解Go如何基于現(xiàn)有的context創(chuàng)建新的context

    在?Golang?中,context?包提供了創(chuàng)建和管理上下文的功能,那么在GO語言中如何基于現(xiàn)有的context創(chuàng)建新的context,下面小編就來和大家詳細(xì)聊聊
    2024-01-01
  • Go語言生成UUID的利器(github.com/google/uuid)

    Go語言生成UUID的利器(github.com/google/uuid)

    UUID是確保每個(gè)元素唯一性的重要工具,Go語言雖然在標(biāo)準(zhǔn)庫中沒有直接提供UUID生成功能,但可以通過安裝github.com/google/uuid庫來實(shí)現(xiàn),本文就來介紹一下,感興趣的可以了解一下
    2024-11-11

最新評(píng)論

雅安市| 宜昌市| 阿拉善盟| 平凉市| 凉山| 昔阳县| 蓬溪县| 澄城县| 元氏县| 巴青县| 仲巴县| 旅游| 阳西县| 绥滨县| 耿马| 茶陵县| 广西| 宁南县| 甘泉县| 班戈县| 凉城县| 视频| 厦门市| 绥芬河市| 思南县| 寻乌县| 酉阳| 新丰县| 威信县| 固镇县| 安庆市| 连平县| 河北区| 石首市| 衡阳县| 万州区| 东兴市| 华蓥市| 安塞县| 凤庆县| 垣曲县|