Go語言。在Python中,符合原生且可以支持decimal類型的語言是Go語言。decimal是指帶固定精度和小數(shù)位數(shù)的數(shù)值數(shù)據(jù)類型,數(shù)據(jù)就是數(shù)值,數(shù)據(jù)有很多種,最簡單的就是數(shù)字。
武鄉(xiāng)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,武鄉(xiāng)網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為武鄉(xiāng)成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的武鄉(xiāng)做網(wǎng)站的公司定做!
本文介紹一些Go語言的基礎(chǔ)語法。
先來看一個簡單的go語言代碼:
go語言的注釋方法:
代碼執(zhí)行結(jié)果:
下面來進一步介紹go的基礎(chǔ)語法。
go語言中格式化輸出可以使用 fmt 和 log 這兩個標(biāo)準(zhǔn)庫,
常用方法:
示例代碼:
執(zhí)行結(jié)果:
更多格式化方法可以訪問中的fmt包。
log包實現(xiàn)了簡單的日志服務(wù),也提供了一些格式化輸出的方法。
執(zhí)行結(jié)果:
下面來介紹一下go的數(shù)據(jù)類型
下表列出了go語言的數(shù)據(jù)類型:
int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。
常量是在程序編譯時就確定下來的值,程序運行時無法改變。
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
Go 語言的運算符主要包括算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關(guān)運算符。
算術(shù)運算符:
關(guān)系運算符:
邏輯運算符:
位運算符:
賦值運算符:
指針相關(guān)運算符:
下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。
if語法格式如下:
if ... else :
else if:
示例代碼:
語法格式:
另外,添加 fallthrough 會強制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。
示例代碼:
執(zhí)行結(jié)果:
下面介紹幾種循環(huán)語句:
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
也可以通過標(biāo)記退出循環(huán):
--THE END--
在公司項目中看到關(guān)于錢的數(shù)據(jù)在接口展示、添加修改的各種情況下結(jié)構(gòu)體中相應(yīng)字段用的都是string類型。覺得不太合理,因此查閱了一些資料,整理如下。
在網(wǎng)上搜到一篇博客:
在程序計算中涉及到錢的時候,為什么要用Decimal而不是Float
博客中介紹,如果用float類型再轉(zhuǎn)為decimal類型時會造成精度丟失。轉(zhuǎn)為string后再轉(zhuǎn)為decimal則可以解決問題,保證精度。看著好像是很完美的回答了我想要了解的問題,但仔細一看用的語言是python,于是我便親自試了下:
結(jié)果確實如此,但看版本是2.7,我懷疑是不是python2.7版本落后,因此存在問題,于是又換了python3,再次測試:
結(jié)論依然是一樣。好吧,證實了,對于python確實應(yīng)該先轉(zhuǎn)為string再轉(zhuǎn)為decimal。
但是,python是這樣,難道go也是這樣嗎,于是我又開始了進一步測試:
go中decimal使用第三方庫
這里是直接用float64轉(zhuǎn)為decimal,并沒有通過string中轉(zhuǎn),結(jié)果輸出如下:
乍一看,看著好像是精度丟失了似的,但是對比后我們發(fā)現(xiàn),float64和decimal前后都是一致的,也就是說float64轉(zhuǎn)為decimal之后,保持了原樣。那些看起來小數(shù)點后位數(shù)很多的結(jié)果,是因為float64浮點類型計算產(chǎn)生的問題,跟轉(zhuǎn)換并沒有關(guān)系。
為了驗證這一結(jié)論,我又寫了下面的測試:
不使用浮點類型相加,而用decimal類型相加,這樣輸出結(jié)果果然沒問題了:
因此我們可以得出結(jié)論:對于go語言,在把float轉(zhuǎn)換為decimal類型時,并不需要像python一樣通過string中轉(zhuǎn),也依然可以保持精度。進一步,我們也可以想到上面的問題,對于錢,在結(jié)構(gòu)體字段中,我們完全可以直接使用float類型,并不需要用string類型。而且好處時,使用float數(shù)值類型,無論對于前端還是后端,在進行數(shù)值范圍驗證的時候,會更方便,不必把string轉(zhuǎn)為float后再驗證了。
上面提到了decimal包,我們這里簡單看下,里面的常用的方法:
定義decimal的幾種方式:
decimal數(shù)值運算
比較:
我們再看下浮點精度運算不準(zhǔn)確的原因,這篇文章講解的比較細
浮點精度(float、double)運算不精確的原因
精度運算不準(zhǔn)確這是為什么呢?我們接下來就需要從計算機所有數(shù)據(jù)的表現(xiàn)形式二進制說起了。如果大家很了解二進制與十進制的相互轉(zhuǎn)換,那么就能輕易的知道精度運算不準(zhǔn)確的問題原因是什么了。
接下來我們看一個簡單的例子 2.1 這個十進制數(shù)轉(zhuǎn)成二進制是什么樣子的。
落入無限循環(huán)結(jié)果為 10.0001100110011........ , 我們的計算機在存儲小數(shù)時肯定是有長度限制的,所以會進行截取部分小數(shù)進行存儲,從而導(dǎo)致計算機存儲的數(shù)值只能是個大概的值,而不是精確的值。從這里看出來我們的計算機根本就無法使用二進制來精確的表示 2.1 這個十進制數(shù)字的值,連表示都無法精確表示出來,計算肯定是會出現(xiàn)問題的。
1、為什么數(shù)值表示用decimal 不用double
2、在程序計算中涉及到錢的時候,為什么要用Decimal而不是Float
3、MySQL數(shù)據(jù)類型DECIMAL用法
4、浮點精度(float、double)運算不精確的原因
網(wǎng)站題目:go語言的小數(shù)類型 go語言的數(shù)據(jù)類型
網(wǎng)址分享:http://vcdvsql.cn/article46/ddeioeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)站排名、云服務(wù)器、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)