關於float資料型別的雷

2022-03-12 04:36:04 字數 942 閱讀 8235

在用到float型別時,遇到了之前沒有關注的【三個雷】。

【雷一】:

在用sqlserver呼叫其它sqlserver資料庫時,對方給我的資料型別是float,但介面文件中說是 numeric(30,10)型別,於是我就用numeric(30,10)去接收,導致接收資料錯誤:    如:原資料是 45.78,接收過來就變成了 45.7799999999。

最後改成float接收,問題解決

【雷二】:

在c# 讀取sqlserver中float資料時,c# 也使用 float 接收,結果讀取出來的資料就不對了,後來上網查尋後,發現 sqlserver的float型別,對應c#的是double型別。

然後c# 換成double型別,暫時解決了這個問題,為啥叫暫時解決了?因為後面有 踩到了乙個很容易忽略的雷。

【雷三】:

在第二步的基礎上,使用double型別,接收了float資料後,需要進行四捨五入的計算,結果鬱悶了。double的四捨五入是西方的概念,不是中國的四捨五入概念。怎麼理解呢?也就是說 double的 四捨五入,實際邏輯是 「四捨六入,五平均」,四捨六入好理解,何為「五平均」呢?舉個例子你就明白了

原數double型別:45.465      math.round(45.465,2)     結果就是 45.47

45.475      math.round(45.475,2)     結果仍是 45.47 

這就叫 「五平均」,看前面的那個數是偶數還是奇數,然後偶數進一,奇數不進一。

【注意】還有乙個注意點: math.round(45.475,2,midpointrounding.awayfromzero);  midpointrounding.awayfromzero對正數有用,對負數無效。

最後使用decimal解決了這個問題, 但decimal不存在這個問題,於是使用了decimal型別接收了資料庫的float型別,解決了第二個雷遺留的問題。

float資料型別

學習一門語言都要打好基礎,前面的知識可能看著無聊,但是很重要,能夠讓我們打好堅實的基礎,一定要掌握int float long 字串 列表 元組 集合 字典 函式和類的基礎常用的操作。下面來看一看float資料型別都有那些常用的操作,以及和int不一樣的地方 1.as integer ratio d...

Golang 資料型別 float型別

1.1.1基本介紹 小數型別就是用於存放小數的,比如 1.2 0.23 1.911 案例演示 1.2小數型別分類 對上圖的說明 1 關於浮點數在機器中存放形式的簡單說明,浮點數 符號位 指數字 尾數字說明 浮點數都是有符號的.2 尾數部分可能丟失,造成精度損失。123.0000901 說明 floa...

float4資料型別

gpu是以四維向量為基本單位來計算的。4個浮點數所組成的float4向量是gpu內建的最基本型別。使用gpu對兩個float4向量進行計算,與cpu對兩個整數或兩個浮點數進行計算一樣簡單,都是只需要乙個指令就可以完成。hlsh的基本資料型別定義了float int和bool等非向量型別,但是它們實際...