亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

浮點(diǎn)數(shù)儲(chǔ)存至內(nèi)存中時(shí),2的-1、-2……-n次方不能精確的表示小數(shù)部分,所以再把這個(gè)數(shù)從地址中取出來(lái)進(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類(lèi)型的數(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ù)庫(kù)中金額元存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)使用的是decimal(15,2),golang中使用float64保存變量?jī)?nèi)容。通過(guò)轉(zhuǎn)換將 float64 -> int64

最簡(jiǎn)單的方式:int64(float64 * 100),但是由于浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)的表示方式問(wèn)題導(dǎo)致有一部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)問(wè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語(yǔ)言中println和fmt.Println區(qū)別

    Go語(yǔ)言中println和fmt.Println區(qū)別

    本文主要介紹了Go語(yǔ)言中println和fmt.Println區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解決golang編譯提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed(推薦)

    解決golang編譯提示dial tcp 172.217.160.113:443: con

    這篇文章主要介紹了解決golang編譯提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed,此問(wèn)題完美解決,需要的朋友可以參考下
    2023-02-02
  • Go實(shí)現(xiàn)用戶每日限額的方法(例一天只能領(lǐng)三次福利)

    Go實(shí)現(xiàn)用戶每日限額的方法(例一天只能領(lǐng)三次福利)

    這篇文章主要介紹了Go實(shí)現(xiàn)用戶每日限額的方法(例一天只能領(lǐng)三次福利)
    2022-01-01
  • Golang函數(shù)式編程深入分析實(shí)例

    Golang函數(shù)式編程深入分析實(shí)例

    習(xí)慣與函數(shù)式編程語(yǔ)言的開(kāi)發(fā)者,會(huì)認(rèn)為for循環(huán)和if判斷語(yǔ)句是冗長(zhǎng)的代碼,通過(guò)使用map和filter處理集合元素讓代碼更可讀。本文介紹Go閉包實(shí)現(xiàn)集合轉(zhuǎn)換和過(guò)濾功能
    2023-01-01
  • 淺析Go使用定時(shí)器時(shí)如何避免潛在的內(nèi)存泄漏陷阱

    淺析Go使用定時(shí)器時(shí)如何避免潛在的內(nèi)存泄漏陷阱

    這篇文章來(lái)和大家一起探討一下Go?中如何高效使用?timer,特別是與select?一起使用時(shí),如何防止?jié)撛诘膬?nèi)存泄漏問(wèn)題,感興趣的可以了解下
    2024-01-01
  • Go實(shí)現(xiàn)將io.Writer轉(zhuǎn)換成字符串

    Go實(shí)現(xiàn)將io.Writer轉(zhuǎn)換成字符串

    golang中提供了各種類(lèi)型之間的轉(zhuǎn)換方法,其中,將其他類(lèi)型轉(zhuǎn)換為字符串類(lèi)型是常見(jiàn)的操作,本文主要介紹了Go實(shí)現(xiàn)將io.Writer轉(zhuǎn)換成字符串,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Go日常開(kāi)發(fā)常用第三方庫(kù)和工具介紹

    Go日常開(kāi)發(fā)常用第三方庫(kù)和工具介紹

    這篇文章主要介紹了Go日常開(kāi)發(fā)常用第三方庫(kù)和工具介紹,主要有web開(kāi)發(fā)、數(shù)據(jù)庫(kù)開(kāi)發(fā)、Redis開(kāi)發(fā)需要的朋友可以參考下
    2022-11-11
  • golang使用net/rpc庫(kù)實(shí)現(xiàn)rpc

    golang使用net/rpc庫(kù)實(shí)現(xiàn)rpc

    這篇文章主要為大家詳細(xì)介紹了golang如何使用net/rpc庫(kù)實(shí)現(xiàn)rpc,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2024-01-01
  • golang函數(shù)的返回值實(shí)現(xiàn)

    golang函數(shù)的返回值實(shí)現(xiàn)

    本文主要介紹了golang函數(shù)的返回值實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang編程入門(mén)之http請(qǐng)求天氣實(shí)例

    golang編程入門(mén)之http請(qǐng)求天氣實(shí)例

    這篇文章主要介紹了golang編程入門(mén)之http請(qǐng)求天氣實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論