round() returns 多余的小数
round() returns redundant amount of decimals
我编写了很多 PHP 应用程序,只是偶然发现了一个奇怪的场景。 round 函数似乎不适用于一组非常复杂的代码。在打电话之前我已经尝试了很多不同的事情,但这根本行不通。函数 returns 0.56000000000000001 当给定 round($val,2)
和 $val=0.5600
时。这显然应该 return 0.56。
我已更改我的代码以使用 number_format($val,2,',','')
。这似乎已经解决了这个问题,但现在我第二次猜测我的所有其他代码。
我应该在所有地方用 number_format 替换 round 吗?有没有人有类似的回合错误?
另请注意,这似乎与本例中使用的 PhpExcel 相关联。 https://github.com/PHPOffice/PHPExcel/issues/237
无需将round
替换为number_format
。您可以使用带有标志的 round
来向下舍入。
选择最适合应用程序的内容。
- 你在舍入
float
吗?使用 round
- 您要格式化数字并按千位分组吗?使用
number_format
<?php
$number = '0.5600';
echo round((float)$number, 2, PHP_ROUND_HALF_DOWN);
问题是不是每个十进制数都可以用标准浮点数精确表示。这是一个很常见的问题,你的不是唯一的。如果您需要精确表示,那么您正在做的,即将浮点数转换为字符串就足够了。
其他一些解决方案:
- 将带浮点数的
==
转换为 <=
或 >=
- 将
==
转换为公差,例如b–ε ≤ a ≤ b+ε
,ε
一些相对于 |a|
或 |b|
或两者 的常数或值
我编写了很多 PHP 应用程序,只是偶然发现了一个奇怪的场景。 round 函数似乎不适用于一组非常复杂的代码。在打电话之前我已经尝试了很多不同的事情,但这根本行不通。函数 returns 0.56000000000000001 当给定 round($val,2)
和 $val=0.5600
时。这显然应该 return 0.56。
我已更改我的代码以使用 number_format($val,2,',','')
。这似乎已经解决了这个问题,但现在我第二次猜测我的所有其他代码。
我应该在所有地方用 number_format 替换 round 吗?有没有人有类似的回合错误?
另请注意,这似乎与本例中使用的 PhpExcel 相关联。 https://github.com/PHPOffice/PHPExcel/issues/237
无需将round
替换为number_format
。您可以使用带有标志的 round
来向下舍入。
选择最适合应用程序的内容。
- 你在舍入
float
吗?使用round
- 您要格式化数字并按千位分组吗?使用
number_format
<?php
$number = '0.5600';
echo round((float)$number, 2, PHP_ROUND_HALF_DOWN);
问题是不是每个十进制数都可以用标准浮点数精确表示。这是一个很常见的问题,你的不是唯一的。如果您需要精确表示,那么您正在做的,即将浮点数转换为字符串就足够了。
其他一些解决方案:
- 将带浮点数的
==
转换为<=
或>=
- 将
==
转换为公差,例如b–ε ≤ a ≤ b+ε
,ε
一些相对于|a|
或|b|
或两者 的常数或值