關於浮點型的運算 比較

2022-08-19 15:39:13 字數 965 閱讀 5070

1.常見問題

$a = 0.1;

$b = 0.7;

var_dump(($a + $b) == 0.8);

列印出來的值居然為 boolean false

printf("%.20f", $a

);printf("%.20f", $b

);0.10000000000000000555

0.69999999999999995559

顯然是不相等的。

對於常用金額資料比較

$a = 456;

$b = 4.56;

$a  == $b*100 是不成立的

printf("%.20f", $a

);printf("%.20f", $b*100);

456.00000000000000000000

455.99999999999994315658

顯然也是不成立的  

2.解決辦法(總結的以下方式)

1)bccomp

( string$left_operand

string$right_operand[, 

int$scale= int

] ) 高精度的比較兩個浮點數(字串)

如果兩個數相等返回0, 左邊的數left_operand比較右邊的數right_operand大返回1, 否則返回-1.

2)

$scale = 0.00001

$a = 0.6995559;

$b = 0.6995552;

$a - $b < $scale $scale 小數點後5位比較

$a == $b

3)$a /100 == $b;

相同小數是相同的

浮點型資料不能直接比較

程式設計題 計算2個複數的和 差 積 商。輸入格式 輸入在一行中按照a1 b1 a2 b2的格式給出2個複數c1 a1 b1i和c2 a2 b2i的實部和虛部。題目保證c2不為0。輸出格式 分別在4行中按照 a1 b1i 運算子 a2 b2i 結果的格式順序輸出2個複數的和 差 積 商,數字精確到小...

關於浮點數的比較

include int main return 0 這段 編譯會有警告 warning c4305 initializing truncation from const double to float 也就是說,初始化變數的時候,將double型截斷為float型,有精度損失.同理,則if語句裡面的...

浮點數比較 運算BigDecimal

目錄總結 原文 浮點數float和double進行運算處理的時候,是不精確的,很容易出問題 比如 浮點數是不精確的,一定不要用於比較!float f 0.1f double d 1.0 10 system.out.println f d 結果為false又比如 float d1 423432423f...