iT邦幫忙

0

請問 PHP 中的浮點數問題

  • 分享至 

  • xImage

想請教 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);
?>

感謝大家協助解惑。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
miku3920
iT邦新手 2 級 ‧ 2022-09-16 21:48:29
最佳解答

這是浮點運算的問題吧

十進位轉二進位會損失精度
所有程式語言都有這個問題
https://medium.com/starbugs/809720b32175

原來如此,真是長知識了!好精闢的講解!謝謝您的分享。

將程式 丟到運行中的linux主機中 不會損失精度
而在本機Mac中 使用 XAMPP 架設的環境下,才會出現損失精度

請問您知道為什麼會有這樣的差異嗎?感謝您的分享!

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-09-16 17:26:40

我試不出來你的情形

W3Schools 練習區

https://ithelp.ithome.com.tw/upload/images/20220916/200017871boyEcg90Z.png

我試了五個版本的 php
都試不出來你的情形
/images/emoticon/emoticon25.gif
https://ithelp.ithome.com.tw/upload/images/20220917/20001787BFFvB8Ujtj.png

如果你想試別的版本
可以到這裡試試看
有一大堆php的版本可以測試
/images/emoticon/emoticon13.gif

看更多先前的回應...收起先前的回應...

我在您提供的線上網址試 我進去線上網址測試 也是正常的
將程式 丟到運行中的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版本嗎

PHP Version 8.0.19

抱歉我實在沒輒了
https://ithelp.ithome.com.tw/upload/images/20220919/20001787J1RKoevAzk.png

謝謝您願意幫忙試試

0

這個問題需要考量到作業系統及位元數的不同。
會有不太一樣的呈現處理。

基本上會發生這樣的事,大多發生在轉型時。

這個問題目前在LINUX系統下會比較不容易出現了。
但在WINDOWS上還是會遇到。

依照之前的記錄來看。有人說是因為在WINDOWS下是CGI的模式。
而大多數CGI都是運行在32位元。所以會發生這樣的情況。

我目前來說,其實都是會將其視為都會浮點值運算處理。
輸出都會再做一次處理

將程式 丟到運行中的linux主機中 是正確的值
而發生異常的環境是在本機Mac中 使用 XAMPP 架設的環境下,才會出現異常

如果因作業系統及位元數的不同,會產生差異,是否不建議在本機環境中開發呢?

不知是否能分享輸出前再做一次處理的建議,比較不會因此狀況產生錯誤。

謝謝您的回覆與分享!

我要發表回答

立即登入回答