摘要:今天我們來看一個(gè)在中比較有意思的事浮點(diǎn)數(shù)你認(rèn)為上面的代碼會出現(xiàn)什么結(jié)果呢這種比較視情況而定其實(shí)很簡單,因?yàn)樵谶@里,我們使用了來做比較,所以這個(gè)結(jié)果很清晰的就是,因?yàn)槲覀冏筮吺且粋€(gè)類似的數(shù),右邊是一個(gè)類型的數(shù)。如果你這樣想的話,那你就錯(cuò)了。
今天我們來看一個(gè)在 PHP 中比較有意思的事:浮點(diǎn)數(shù)(floats)
你認(rèn)為上面的代碼會出現(xiàn)什么結(jié)果呢?1. true 2. false 3. 這種比較視情況而定
其實(shí)很簡單,因?yàn)樵谶@里,我們使用了 === 來做比較,所以這個(gè)結(jié)果很清晰的就是 false,
因?yàn)槲覀冏筮吺且粋€(gè) floats 類似的數(shù),右邊是一個(gè) int 類型的數(shù)。
這是沒什么可以特別討論的。那如果是這樣呢?
就是我們使用 == 來比較的時(shí)候呢?
你可能會這樣想:左邊 120085,右邊 120085,所以結(jié)果是 true。
如果你這樣想的話,那你就錯(cuò)了。其實(shí)你運(yùn)行上面的代碼,結(jié)果回是 false。
然而,我是說然而!你再嘗試修改一下數(shù)字,在運(yùn)行一次代碼,比如這樣:
你會發(fā)現(xiàn)結(jié)果非常神奇,這個(gè)時(shí)候結(jié)果是 true,所以說,這種比較其實(shí)還真是視情況而定。
那么問題出現(xiàn)在哪里呢?我們試著運(yùn)行下面的代碼:
結(jié)果會類似這樣:
float(120085) int(120085)
好像沒看出什么核心區(qū)別,我們這樣再試試:
die(var_dump(120085 - 1200.85 * 100));這個(gè)時(shí)候的結(jié)果應(yīng)該是這樣:
float(1.4551915228367E-11)
這就說明問題了,其實(shí)這個(gè)結(jié)果并不是 0 ,而是一個(gè)很小的 floats 類似的數(shù)。
如果你看 PHP 文檔的時(shí)候:http://php.net/manual/zh/lang...
有注意那個(gè)很大的 Warning 的話,你應(yīng)該就會明白:這里的核心問題其實(shí)就是浮點(diǎn)數(shù)的精度!那這樣的話,我們?nèi)绾伪容^才是我們期望的值呢?
答案就是使用 round() 函數(shù),像是這樣:
die(var_dump(round(1200.85 * 100) == 120085));所以吧,在使用 PHP 做這些精度計(jì)算比較的時(shí)候,一定要實(shí)測它的比較結(jié)果,或者是使用一些保險(xiǎn)的手段進(jìn)行比較,不然就會吃大虧!
關(guān)注公眾號 codecasts ,每天更新 PHP Laravel 技能
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/26114.html
摘要:一浮點(diǎn)型數(shù)據(jù)及其取值范圍二浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存儲一小數(shù)的二進(jìn)制十進(jìn)制轉(zhuǎn)二進(jìn)制整數(shù)部分與整數(shù)原理相同,按照整數(shù)二進(jìn)制轉(zhuǎn)換的規(guī)則,寫成對應(yīng)的二進(jìn)制數(shù)。全為表示浮點(diǎn)數(shù)的最大值或者最小值。 ...
摘要:例如返回的結(jié)果并不是,而是冪指數(shù)取余賦值給變量使用函數(shù)來查看變量類型整型數(shù)字的最大最小值在位系統(tǒng)中,一個(gè)整型個(gè)字節(jié),最小值,最大值。事實(shí)上,中儲存的值為,因?yàn)檫@是最接近的浮點(diǎn)數(shù)。 整型 Integers 整型運(yùn)算,加減乘: 2 + 2 4 3 - 4 -1 4 * 5 20 在Python 2.7中,整型的運(yùn)算結(jié)果只能返回整型,除法的結(jié)果也不例外。 例如12 / ...
摘要:數(shù)據(jù)的存儲前言數(shù)據(jù)類型匯總整型家族浮點(diǎn)型家族自定義類型指針類型。整型家族注在之后的標(biāo)準(zhǔn)規(guī)定,將類型數(shù)據(jù)劃分為整型家族,因?yàn)樽址趦?nèi)存中會將其轉(zhuǎn)化為碼值進(jìn)行存儲。 ...
摘要:前言對于程序員的世界,一切東西皆二進(jìn)制。地址的計(jì)算根據(jù)常識,的每一位的區(qū)域只有在區(qū)間。根據(jù)它的二進(jìn)制就明了。查詢的話,數(shù)字效率是高于字符串的。 前言 ??對于程序員的世界,一切東西皆二進(jìn)制。 PHP整型長度與二進(jìn)制原理 ??我們一直說的整型有32位,很多人都說整型數(shù)最大值有2^32 -1,其實(shí)這個(gè)相對于無符號整型數(shù),那么這里來談?wù)撓掠蟹栒蛿?shù)。一個(gè)整型占四個(gè)字節(jié),每個(gè)字節(jié)有8bit,...
閱讀 1636·2021-11-02 14:42
閱讀 2406·2021-10-11 10:58
閱讀 731·2021-09-26 09:46
閱讀 2967·2021-09-08 09:35
閱讀 1496·2021-08-24 10:01
閱讀 1285·2019-08-30 15:54
閱讀 3663·2019-08-30 15:44
閱讀 1850·2019-08-30 10:49