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

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

WBOY
Freigeben: 2016-06-06 20:29:42
Original
1219 Leute haben es durchsucht

结果994是怎么回事?

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

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

回复内容:

结果994是怎么回事?

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

不要像 @小田和小春 那样回答了。我的真实意思是想理解为什么是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>
Nach dem Login kopieren

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

比如:PHP: Float 浮点型 - Manual

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

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

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

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage