使用浮點型別導致計算誤差以及判斷誤差

2022-05-14 22:20:33 字數 431 閱讀 4612

1.計算誤差

浮點的精度是可變的,除非分數是2的整數冪次方,否者無法用有限的二進位制小數表示。

即 0.1 分母為10, 則分數應該是2的3次方至2的4次方之間,具體是多少我也算不出來了···。即這個次方數會為乙個特別長的小數,在有限的長度中無法體現出來。

則0.1會被表示為乙個十分接近0.1的值,如0.1000000000000000001 或0.099999999999999999

所以在精確的計算中,使用浮點型別會造成計算的誤差。

使用decimal可以解決此問題,不過decimal的範圍比浮點型別來說相對較小,所以在將浮點型別轉換成decimal型別時,有溢位的風險。

2.判斷誤差

基於上述解釋

float num1=0.1f;

decimal num2=0.1m;

則 num1!=num2;

浮點型別深談

1 編寫本文目的 浮點運算已屬常用,但仍有深究必要,以消除其中可能的錯誤使用。2 預期讀者 4 正文 float格式簡談 inter 80386 80387 及以上型號cpu有三種浮點型別,即短實數 長實數和80位臨時實數,分別占用4位元組 8位元組和10位元組,對應著c c 中的float dou...

浮點列型別

對於浮點列型別,在mysql中單精度值使用4個位元組,雙精度值使用8個位元組。float型別用於表示近似數值資料型別。sql標準允許在關鍵字float後面的括號內選擇用位指定精度 但不能為指數範圍 mysql還支援可選的只用於確定儲存大小的精度規定。0到23的精度對應float列的4位元組單精度。2...

002 浮點型別

浮點型別表示數字包含小數部分。共兩種浮點型別 型別儲存要求 表示範圍 float 4 byte 大約 3.40282347e 38f 有效小數字數6 7位 double 8 byte 大約 1.79769313486231570e 308 有效小數為15位 double的數字的精度是float的兩倍...