Heim > Backend-Entwicklung > PHP-Tutorial > $b=(0.1+0.7)*10; echo intval($b);为何输出0.7?

$b=(0.1+0.7)*10; echo intval($b);为何输出0.7?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-06 20:38:09
Original
1124 Leute haben es durchsucht

<code>php</code><code><br><br><br><br><br>  $b=(0.1+0.7)*10;
echo  intval($b);

</code>
Nach dem Login kopieren
Nach dem Login kopieren

为什么输出的是0.7?不是0.8?

回复内容:

<code>php</code><code><br><br><br><br><br>  $b=(0.1+0.7)*10;
echo  intval($b);

</code>
Nach dem Login kopieren
Nach dem Login kopieren

为什么输出的是0.7?不是0.8?

跟浮点数运算的性质有关,你直接输出$b会发现计算的结果是0.7999999,而intval是向下取整的,可以改用ceil。
参见:http://php.net/manual/en/language.types.integer.php#language.types.integer.casting

我们来看一下$b的二进制形式:

<code><?php $b = (0.1 + 0.7) * 10;
$c = unpack('H16hex', pack('d', $b));
echo $c['hex'];
?>
</code>
Nach dem Login kopieren

输出:

<code>ffffffffffff1f40
</code>
Nach dem Login kopieren

由于little-endian, 实际上是 0x401fffffffffffff,这个数字按照IEEE754标准转换为十进制的话 就是

<code>7.999999999999999
</code>
Nach dem Login kopieren

php找不到合适的测试方法,你可以用Java试下以下代码

<code>System.out.println(Double.longBitsToDouble(0x401fffffffffffffL));
</code>
Nach dem Login kopieren

其他的内容, 楼上几位都解释得很清楚了~

http://www.laruence.com/2013/03/26/2884.html

Verwandte Etiketten:
php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage