為什麼php中echo intval 0 1 0 7 10 結果為7而不是

2021-04-18 05:44:02 字數 1284 閱讀 2026

1樓:匿名使用者

如果bai你仔細看過在php手冊du

中,對於浮點資料型別的說明

zhi,就會dao

看到其中有專門的一個回警告提示,就談到這答個問題:

關於浮點數精度的警告

顯然簡單的十進位制分數如同 0.1 或 0.7不能在不丟失一點點精度的情況下轉換為內部二進位制的格式。這就會造成混亂的結果:

例如,floor((0.1+0.7)*10)通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9。

這和一個事實有關,那就是不可能精確的用有限位數表達某些十進位制分數。例如,十進位制的 1/3 變成了 0.3。

所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函式或者 gmp 函式。

實際上,並不是php會有這種現象,對於其他計算機語言,類似的浮點數問題也是差不多的。

2樓:匿名使用者

這個php 沒關係

計算機中 浮點數 的儲存 照成的

它是以 2進位制存的 存的

可以看看 計算機基礎 原碼 反碼 補碼

php取模的問題

3樓:龍佔長歌

問了問朋友發現一個問題:就是浮點轉整型的時候:

<?php

$a = 9.45*100;

var_dump($a);

var_dump(intval($a));

$a = 945*1.00;

var_dump($a);

var_dump(intval($a));

?>

執行結果如下:

float(945) int(944) float(945) int(945)

同是浮點 945 ,一個轉成 944 一個轉成 955

顯然簡單的十進位制分數如同 0.1 或 0.7 不能在不丟失一點點精度的情況下轉換為內部二進位制的格式。

這就會造成混亂的結果:例如,floor((0.1+0.

7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999...。

這和一個事實有關,那就是不可能精確的用有限位數表達某些十進位制分數。例如,十進位制的 1/3 變成了 0.3333333. . .。

所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。

也就是說 9.45*100 類似等於 944.9999

以上解釋希望能對你有所幫助。。

關於php中,關於php中 POST submit 的問題

if post submit post submit 這裡重點不是要接收它的值,而是判斷他有沒有按這個按鈕,也就是是否提交表單,如果提交了就執行它下面 裡的程式,你可以做以下理解 if 提交表單 else 這個是用來判斷下是否為表單提交過來的值用。有的程式寫的不嚴謹,直接通過url也可以執行入庫操作...

php中n是什麼意思,php中的是什麼意思

在php語言中,字串裡面的 n表示換行,是ascii為10的那個特殊字元,作用是echo等輸出字串的時內候,這個符號以後的內容在新的一行上輸出,n就是根據因為的容new line得來的。php裡面除了 n,還有 r表示回車 ascii是13 還有 t表示製表 ascii是9 這些和perl c語言基...

php中如何傳送http請求,PHP中如何傳送HTTP請求

看起來你的 正確,不知道你有什麼問題。這個方法不錯,但是最好用一個封裝好的類。比如http client之類的,網上這樣的類挺多了,你可以搜尋一下。當然直接用socket也可以。php 如何傳送http請求 第一種bai 實現方式 實用socket程式設計,通常我du們實用fsockopen這個函z...