欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決Golang小數(shù)float64在實際工程中加減乘除的精度問題

 更新時間:2021年03月22日 14:29:42   作者:muhongzhong  
這篇文章主要介紹了解決Golang小數(shù)float64在實際工程中加減乘除的精度問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

GO語言的float64類型在做加減乘除時會出現(xiàn)一些問題

比如乘法運算,實例,將小數(shù)的元轉(zhuǎn)換成整數(shù)的分:

發(fā)現(xiàn)將小數(shù)的元乘以100后強(qiáng)制轉(zhuǎn)換為整數(shù)分,少了1分

解決辦法:

var (
a, b float64
c int64
)
a = 2.55
b = 0.0
c = int64((a + b) * 100.0)
fmt.Printf("第1次 c=%d\n", c) //第1次 c=254
c = int64(a * 100.0)
fmt.Printf("第2次 c=%d\n", c) //第2次 c=254
fmt.Println(a * 100) //254.99999999999997
//發(fā)現(xiàn)將小數(shù)的元乘以100后強(qiáng)制轉(zhuǎn)換為整數(shù)分,少了1分
//解決辦發(fā)1:
tmpStr1 := fmt.Sprintf("%.2f", a)
tmpStr2 := fmt.Sprintf("%.2f", b)
tmpnum1, _ := strconv.ParseInt(strings.Replace(tmpStr1, ".", "", 1), 10, 64)
tmpnum2, _ := strconv.ParseInt(strings.Replace(tmpStr2, ".", "", 1), 10, 64)
c = tmpnum1 + tmpnum2
fmt.Printf("第3次 c=%d\n", c) //第3次 c=255

//方法2:

num3 := math.Ceil(a * 100.0)
fmt.Printf(“num3=%d\n”, int64(num3)) //num3=255
//方法3:
strFloat := strconv.FormatFloat(a*100, ‘f', 0, 64)
nInt64, err := strconv.ParseInt(strFloat, 10, 64)

補充:golang float64,in64相互轉(zhuǎn)換精度控制

如下所示:

//將float64轉(zhuǎn)成精確的int64
func Wrap(num float64, retain int) int64 {
 return int64(num * math.Pow10(retain))
}
//將int64恢復(fù)成正常的float64
func Unwrap(num int64, retain int) float64 {
 return float64(num) / math.Pow10(retain)
}
//精準(zhǔn)float64
func WrapToFloat64(num float64, retain int) float64 {
 return num * math.Pow10(retain)
}
//精準(zhǔn)int64
func UnwrapToInt64(num int64, retain int) int64 {
 return int64(Unwrap(num, retain))
}

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

相關(guān)文章

  • 減少 golang 二進(jìn)制文件大小操作

    減少 golang 二進(jìn)制文件大小操作

    這篇文章主要介紹了減少 golang 二進(jìn)制文件大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 掌握GoLang Fiber路由和中間件技術(shù)進(jìn)行高效Web開發(fā)

    掌握GoLang Fiber路由和中間件技術(shù)進(jìn)行高效Web開發(fā)

    這篇文章主要為大家介紹了GoLang Fiber路由和中間件進(jìn)行高效Web開發(fā),本文將深入探討 Fiber 中的路由細(xì)節(jié),學(xué)習(xí)如何創(chuàng)建和處理路由,深入了解使用路由參數(shù)的動態(tài)路由,并掌握在 Fiber 應(yīng)用程序中實現(xiàn)中間件的藝術(shù)
    2024-01-01
  • Golang中閉包與常用場景詳解

    Golang中閉包與常用場景詳解

    在很多的開源項目里,經(jīng)常看到閉包的運用,這篇文章主要為大家簡要記錄一下閉包的概念和一些常用的場景,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • go?GCM?gin中間件的加密解密文件流處理

    go?GCM?gin中間件的加密解密文件流處理

    這篇文章主要介紹了go語言?GCM加密解密,gin中間件的加密解密及文件流處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-05-05
  • 解析go語言調(diào)用約定多返回值實現(xiàn)原理

    解析go語言調(diào)用約定多返回值實現(xiàn)原理

    這篇文章主要為大家介紹了解析go語言調(diào)用約定多返回值實現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 詳解如何在golang鏡像中設(shè)置指定時區(qū)

    詳解如何在golang鏡像中設(shè)置指定時區(qū)

    這篇文章主要為大家詳細(xì)介紹了如何在golang鏡像中設(shè)置指定時區(qū),文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的可以了解一下
    2023-04-04
  • GO 切片刪除元素的三種方法

    GO 切片刪除元素的三種方法

    本文主要介紹了GO 切片刪除元素,根據(jù)要刪除元素的位置有三種情況,分別是從開頭位置刪除、從中間位置刪除和從尾部刪除,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Go中string與[]byte高效互轉(zhuǎn)的方法實例

    Go中string與[]byte高效互轉(zhuǎn)的方法實例

    string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會發(fā)生底層數(shù)據(jù)的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于Go中string與[]byte高效互轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Golang文件讀寫操作詳情

    Golang文件讀寫操作詳情

    這篇文章主要介紹了Golang文件讀寫操作詳情,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的一種,文件最主要的作用就是保存數(shù)據(jù),文件在程序中是以流的形式來操作的,更多詳細(xì)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Go語言leetcode題解953驗證外星語詞典示例詳解

    Go語言leetcode題解953驗證外星語詞典示例詳解

    這篇文章主要為大家介紹了Go語言leetcode題解953驗證外星語詞典示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評論