php – 除了舍入数字之外,round()还做了什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 除了舍入数字之外,round()还做了什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1373字,纯文字阅读大概需要2分钟。
内容图文
![php – 除了舍入数字之外,round()还做了什么?](/upload/InfoBanner/zyjiaocheng/816/b8e1dbec33ff48199a99b8f001477970.jpg)
我只是“修复”以下几行PHP中的错误:
$value = 1091.09; // the failing test case
$prop = sprintf('%013d', $value * 100);
通过添加这些行:
$cents = $value * 100; // $cents is now 109109
$cents = round($cents, 2); // $cents is still 109109
$prop = sprintf('%013d', $cents);
前一个块的结果是“0000000109108”,而第二个块的结果是“0000000109109”,这是正确的.
请注意,我添加了两行,以便能够分别查看调试器中的每个步骤.如果我跳过第一行,它也有效,因此写道:
$cents = round($value * 100, 2); // $cents is now 109109
$prop = sprintf('%013d', $cents);
所以,显然,round()函数对值进行了某些操作,使得它与sprintf()的工作方式不同.它是什么?
如果这是一种恰当的语言,我可能会通过查看数据类型来了解.在这里,我甚至都不知道它们是什么.
解决方法:
它可能不那么简单……
php > $value = 1091.09; print sprintf('%f', $value);
1091.090000
php > $value = 1091.09; print sprintf('%f', $value*100);
109109.000000
php > $value = 1091.09; print sprintf('%f', (int)($value*100));
109108.000000
人们期望在前两个结果中看到所有这些’999999′.
另外:
php > $value = 0.09; print sprintf('%f', $value);
0.090000
php > $value = 0.09; print sprintf('%f', $value*100);
9.000000
php > $value = 0.09; print sprintf('%f', (int)($value*100));
9.000000
(NOTE: same result of 0.009 and 0.9)
最重要的是,@ Mihai可能在his answer中是正确的,但似乎这些“近似”浮点数(无限数量为99999)存在于浮点运算单元内部的深处并且仅在某些非常特殊的情况下影响PHP级别计算.
内容总结
以上是互联网集市为您收集整理的php – 除了舍入数字之外,round()还做了什么?全部内容,希望文章能够帮你解决php – 除了舍入数字之外,round()还做了什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。