日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

在Go中使用接口:實(shí)用性與脆弱性的平衡

來源: 責(zé)編: 時(shí)間:2024-02-04 09:02:12 250觀看
導(dǎo)讀在開發(fā)的初始階段,我們經(jīng)常會(huì)遇到“浮點(diǎn)數(shù)精度”和“貨幣值表示”的問題。那么,如何處理貨幣,如何存儲(chǔ)和傳遞它們。為什么是問題?Go語言中的標(biāo)準(zhǔn)浮點(diǎn)類型具有一定的精度(像其他任何語言一樣),你不能在貨幣操作中使用它們。這

在開發(fā)的初始階段,我們經(jīng)常會(huì)遇到“浮點(diǎn)數(shù)精度”和“貨幣值表示”的問題。0Pv28資訊網(wǎng)——每日最新資訊28at.com

那么,如何處理貨幣,如何存儲(chǔ)和傳遞它們。0Pv28資訊網(wǎng)——每日最新資訊28at.com

為什么是問題?

Go語言中的標(biāo)準(zhǔn)浮點(diǎn)類型具有一定的精度(像其他任何語言一樣),你不能在貨幣操作中使用它們。這里有一個(gè)最簡單的例子:0Pv28資訊網(wǎng)——每日最新資訊28at.com

var v1, v2 = 0.1, 0.2fmt.Println(v1 + v2)// 輸出:0.30000000000000004

你可以計(jì)算你需要將一個(gè)值與另一個(gè)值相加多少次,才能在你的賬戶上獲得額外的錢!但反過來也是一樣 — 在這種情況下,你只是失去了你的錢。0Pv28資訊網(wǎng)——每日最新資訊28at.com

這不僅在對你的錢進(jìn)行數(shù)學(xué)運(yùn)算時(shí)有問題,而且在不同系統(tǒng)或服務(wù)之間傳遞數(shù)據(jù)時(shí)也是有問題的。0Pv28資訊網(wǎng)——每日最新資訊28at.com

下一個(gè)問題 — 傳遞你的錢

每次將你的錢從/到浮點(diǎn)數(shù)進(jìn)行編組時(shí),都會(huì)遇到與上述相同的問題,以及與編組器實(shí)現(xiàn)有關(guān)的其他問題 - json,xml,text等等...0Pv28資訊網(wǎng)——每日最新資訊28at.com

另一個(gè)問題是四舍五入。如果你處理的是貨幣,你總會(huì)面臨四舍五入的問題。你應(yīng)該如何四舍五入你的貨幣值?例如 0.345 元,一般我們還是會(huì)四舍五入到 0.35 元?0Pv28資訊網(wǎng)——每日最新資訊28at.com

我們的選擇是什么?

有一些特殊的類型可用于貨幣的表示和計(jì)算。0Pv28資訊網(wǎng)——每日最新資訊28at.com

Go標(biāo)準(zhǔn)庫有 big.Float 類型(來自 math/big 包,表示任意精度的浮點(diǎn)數(shù))。與 float32 和 float64 不同,它們具有固定的大小和精度,big.Float 允許你為數(shù)字和計(jì)算設(shè)置任意精度。0Pv28資訊網(wǎng)——每日最新資訊28at.com

另一個(gè)不錯(cuò)的選擇是 decimal 庫 (https://github.com/shopspring/decimal)。0Pv28資訊網(wǎng)——每日最新資訊28at.com

關(guān)于四舍五入:0Pv28資訊網(wǎng)——每日最新資訊28at.com

  • 1.234 => 1.23
  • 1.235 => 1.24
  • 1.236 => 1.24

例如,shopspring/decimal 提供了適當(dāng)舍入值的方法。0Pv28資訊網(wǎng)——每日最新資訊28at.com

考慮的另一個(gè)好選擇是使用貨幣單位。這樣,你就從浮點(diǎn)數(shù)問題轉(zhuǎn)移到整數(shù),并將一切都作為整數(shù)計(jì)算。在這里唯一使用四舍五入的地方:傳遞結(jié)果值。0Pv28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在讓我們討論一下在傳遞貨幣時(shí)的選擇。0Pv28資訊網(wǎng)——每日最新資訊28at.com

  • 使用貨幣單位 — 我們將所有內(nèi)容都傳遞為整數(shù),這里沒有浮點(diǎn)問題。只需控制值的限制,就可以了。
  • 將浮點(diǎn)數(shù)作為字符串傳遞。通常也是一個(gè)不錯(cuò)的選擇 — 當(dāng)你將浮點(diǎn)數(shù)作為字符串傳遞時(shí),帶有所需精度(特定小數(shù)位數(shù))的字符串,當(dāng)對方讀取此字符串值并將其轉(zhuǎn)換回浮點(diǎn)數(shù)時(shí),你就是安全的。

簡單的例子

你可以在 Go Playground 上嘗試一下。0Pv28資訊網(wǎng)——每日最新資訊28at.com

package mainimport (    "fmt"    "github.com/shopspring/decimal")func main() {    a := 0.1    b := 0.2    c := decimal.NewFromFloat(a)    d := decimal.NewFromFloat(b)    fmt.Println(a, b, c.String(), d.String())     fmt.Println(a + b)     fmt.Println(c.Add(d).String()) }

輸出為:0Pv28資訊網(wǎng)——每日最新資訊28at.com

0.1 0.2 0.1 0.20.300000000000000040.3

結(jié)論

處理貨幣時(shí) — 使用 math/big 或一些與貨幣相關(guān)的庫,比如 shopspring/decimal,或者只是使用貨幣單位,在這里不要使用浮點(diǎn)數(shù)。將貨幣作為字符串傳遞,或者在貨幣單位中傳遞,不要在這里使用浮點(diǎn)數(shù)。0Pv28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-72433-0.html在Go中使用接口:實(shí)用性與脆弱性的平衡

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 容器下在 Triton Server 中使用 TensorRT-LLM 進(jìn)行推理

下一篇: Effect詳解,你學(xué)會(huì)了嗎?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 2023 年的 Node.js 生態(tài)系統(tǒng)

    隨著技術(shù)的不斷演進(jìn)和創(chuàng)新,Node.js 在 2023 年達(dá)到了一個(gè)新的高度。Node.js 擁有一個(gè)龐大的生態(tài)系統(tǒng),可以幫助開發(fā)人員更快地實(shí)現(xiàn)復(fù)雜的應(yīng)用。本文就來看看 Node.js 最新的生
  • 從 Pulsar Client 的原理到它的監(jiān)控面板

    背景前段時(shí)間業(yè)務(wù)團(tuán)隊(duì)偶爾會(huì)碰到一些 Pulsar 使用的問題,比如消息阻塞不消費(fèi)了、生產(chǎn)者消息發(fā)送緩慢等各種問題。雖然我們有個(gè)監(jiān)控頁面可以根據(jù) topic 維度查看他的發(fā)送狀態(tài),
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實(shí)現(xiàn)原理和應(yīng)用
  • 深度探索 Elasticsearch 8.X:function_score 參數(shù)解讀與實(shí)戰(zhàn)案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時(shí)對搜索結(jié)果進(jìn)行自定義評分。function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進(jìn)行設(shè)置。近期
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會(huì)上,幾個(gè)財(cái)經(jīng)圈媒體大佬就“胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道”展開討論。有
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時(shí)間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進(jìn)展,其中榮耀、三星都已陸續(xù)發(fā)布了最新的折疊屏旗艦,尤其號(hào)榮耀Magi
  • 信通院:小米、華為等11家應(yīng)用商店基本完成APP簽名及驗(yàn)簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機(jī)助手、百度手機(jī)助手、應(yīng)用寶、豌豆莢和努比亞等9家應(yīng)用商店,以及抖音和快手2家新型應(yīng)用分發(fā)平
  • iQOO 11S新品發(fā)布會(huì)

    iQOO將在7月4日19:00舉行新品發(fā)布會(huì),推出杭州亞運(yùn)會(huì)電競賽事官方用機(jī)iQOO 11S。
  • 利用職權(quán)私自解除被封帳號(hào) Meta開除20多名員工

    11月18日消息,據(jù)外媒援引知情人士表示,過去一年時(shí)間內(nèi),F(xiàn)acebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內(nèi)部系統(tǒng)以不當(dāng)方式重置用戶帳號(hào),其
Top 主站蜘蛛池模板: 长丰县| 泸定县| 临桂县| 天峻县| 乌兰察布市| 桦川县| 浠水县| 武安市| 霍州市| 吉林市| 衢州市| 曲周县| 陕西省| 富川| 清苑县| 瑞昌市| 嘉义县| 扶风县| 罗田县| 二连浩特市| 介休市| 瓮安县| 阳信县| 贡觉县| 红安县| 定结县| 固安县| 南城县| 左贡县| 襄汾县| 北票市| 鹤壁市| 罗江县| 特克斯县| 贵州省| 泸水县| 梁平县| 遂宁市| 洛宁县| 宜昌市| 邵武市|