想請教 PHP 中的浮點數,使用 var_dump 出值時,為什麼結果會是
2.345 = 2.345
1.2345e3 = 1234.5
7E-4 = 0.0007
float(2.345000000000000195399252334027551114559173583984375) float(1234.5) float(0.000699999999999999992887633748495090912911109626293182373046875)
而不是以下呢?
2.345 = 2.345
1.2345e3 = 1234.5
7E-4 = 0.0007
float(2.345) float(1234.5) float(0.0007)
程式碼如下
<?php
// 指定浮點變數值
$j = 2.345; $k = 1.2345e3; $l = 7E-4;
echo "2.345 = $j<br/>"; // 顯示變數值
echo "1.2345e3 = $k<br/>";
echo "7E-4 = $l<br/>";
var_dump($j, $k, $l);
?>
感謝大家協助解惑。
這是浮點運算的問題吧
十進位轉二進位會損失精度
所有程式語言都有這個問題
https://medium.com/starbugs/809720b32175
我在您提供的線上網址試 我進去線上網址測試 也是正常的
將程式 丟到運行中的linux主機中 也是正常的
2.345 = 2.345
1.2345e3 = 1234.5
7E-4 = 0.0007
float(2.345) float(1234.5) float(0.0007)
但在本機 Mac中 使用 XAMPP 架設的環境下,才會出現異常的
2.345 = 2.345
1.2345e3 = 1234.5
7E-4 = 0.0007
float(2.345000000000000195399252334027551114559173583984375) float(1234.5) float(0.000699999999999999992887633748495090912911109626293182373046875)
使用 XAMPP 架設的環境下,才會出現異常的
可以用echo phpversion();
看看php版本嗎
這個問題需要考量到作業系統及位元數的不同。
會有不太一樣的呈現處理。
基本上會發生這樣的事,大多發生在轉型時。
這個問題目前在LINUX系統下會比較不容易出現了。
但在WINDOWS上還是會遇到。
依照之前的記錄來看。有人說是因為在WINDOWS下是CGI的模式。
而大多數CGI都是運行在32位元。所以會發生這樣的情況。
我目前來說,其實都是會將其視為都會浮點值運算處理。
輸出都會再做一次處理