PHP 型別轉換的一些BUG

2021-06-16 09:58:33 字數 1218 閱讀 7700

php 型別轉換、fmod()、floor()的一些bug

前述:這段時間在做個資料推導統計的專案,需要頻繁進行數字計算。結果,出了一些問題。資料對不上,除錯了半天,終於找出問題所在。原來問題出在標題那三個選項上。(注:這些bug是不是php的特殊設定我不清楚,這裡姑且把它們當bug。)

正文:1.fmod():返回除法的浮點數餘數。

bug描述:

$a = fmod(0.6,0.2);

var_dump($a);//輸出float 0.2,錯誤。正確值:0.

引數換成整數:

$a = fmod(6,2);

var_dump($a);//輸出結果float 0,正確。

結論:

可見引數為小數時,會出現一些未知的bug問題。所以,使用此函式建議將引數轉化成整數。

2.floor():

捨去法取整.

bug 描述:

這個函式出現錯誤的情況,忘了。。。。總之,也是因為引數是小數的緣故。

3.既然是因為小數引起的,自然想到進行化整。

php 是弱型別語言,在型別轉換上又遇到了一些問題。

由乙個單純的float 數轉換成int的數是正確的。如:

$a = 29.00;

$b = (int)$a;//$b== 29;

var_dump($b);

$b = settype($a,'int');//$b== 29;

var_dump($b);

$b = intval($a);//$b== 29;

var_dump($b);

如果$a 的值是通過表示式得到的,問題就來了:

$d = 0.29*100;

$a = $d; //即使經過這步的賦值,還是一樣有問題。

$b = (int)$a;//$b== 28;

var_dump($b);

$b = settype($a,'int');//$b== 28;

var_dump($b);

$b = intval($a);//$b== 28;

var_dump($b);

$b 轉化成int型就變成了28。

我的處理方式是:先將$a的值轉化成string型別,再轉換成int型別的值。

整理的一些Bug

前言 最近在學c 因為公司要求,以前從沒接觸過c 但是來到這個公司公司的人要我負責c 的乙個工程,所以沒辦法,學唄,難道不是很難,現在的學習環境也很好,直接就上專案,這樣學起來會很快,這篇部落格是將我所遇到的一些bug整理一下,以回顧回顧。1.無法顯示額外的 分析警告或錯誤 在使用vs2005編譯程...

解BUG的一些心得

目前,軟體 一直是程式設計師的夢魘,但其實只要掌握一定的技巧和基本知識,是可以輕鬆解決掉這些bug的。1 程式跑一段時間以後會越跑越慢。2 程式無緣無故crash。3 程式記憶體越變越大,直至程式crash。4 程式跑著突然死掉了。一 定位執行緒。以上解決問題的關鍵是先定位到程式變慢的 對於第1 4...

關於型別轉換的一些問題

今天在寫 時使用乙個long long型別的變數儲存乙個數的累加,最後在輸入的時候發生了溢位。可能發生溢位的可能有幾個地方 1.其實變數並沒有溢位,只是在輸出時沒有使用正確的方式,例如long long型別 在使用printf時 識別符號應該使用 lld,unsigned longlong 應該使用...