Home >Backend Development >PHP Tutorial >为啥printf ("(9.95 * 100) = %d n", (9.95 * 100));结果是994?

为啥printf ("(9.95 * 100) = %d n", (9.95 * 100));结果是994?

WBOY
WBOYOriginal
2016-06-06 20:29:421208browse

结果994是怎么回事?

<code>printf ("(9.95 * 100) = %d \n", (9.95 * 100));</code>

不要像 @小田和小春 那样回答了。我的真实意思是想理解为什么是9.95*100的时候结果是994.而9.96,9.97,9.94,9.93均是正常的

回复内容:

结果994是怎么回事?

<code>printf ("(9.95 * 100) = %d \n", (9.95 * 100));</code>

不要像 @小田和小春 那样回答了。我的真实意思是想理解为什么是9.95*100的时候结果是994.而9.96,9.97,9.94,9.93均是正常的

浮点运算有精度损失,9.95 * 100 算出来的结果应该是 994.9999999999999,取整是截掉小数部分,就是 994 了。如果用四舍五入计算,就能得到 995

<code class="php">printf ("(9.95 * 100) = %d \n", round(9.95 * 100));</code>

拿起任何一本技术书籍,看浮点数计算章节。

比如:PHP: Float 浮点型 - Manual

另外,可以研究一下以下什么差别

<code>printf ("(9.95 * 100) = %s \n", (9.95 * 100));</code>

两层原因,一是(9.95 * 100)的类型是浮点型,将其强制转换为整形将损失精度,即小数部分被舍去;二是这里恰好出现了一个巧合,即(9.95 * 100)实际上的值为994.9999999999999。其实浮点数出现精确度问题的这种情况并不少见,详细信息可以参见这里。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn