php - 当-11.5加11.5等于float(2.8421709430404E-14)

标签 php

<分区>

Possible Duplicate:
PHP Math Precision
Best practice for working with currency values in PHP?

我真的希望有人能提供帮助。在这件事上,我一直在用头撞墙。

情况是这样的: 我有一个结帐计算折扣后的小计为 - £11.50。然后需要添加 11.50 英镑的运费,恕我直言,这应该等于 0 英镑。

但是当计算运行时它返回一个 float 2.8421709430404E-14

在我的调试工作中,我这样做了:

var_dump(
    $build['total'], // float(-11.5)
    $build['delivery'], // float(11.5)
    (($build['total'])+($build['delivery'])) // float(2.8421709430404E-14)
);

但是当我进行静态计算时:

var_dump((-11.5 + 11.5)); // float(0)

有什么想法吗?

最佳答案

2.8421709430404E-14 是最接近(但不等于)PHP 可以输出的零数。 它不完全为 0 的原因在于 float 的定义 - 它们永远不会完全精确。

如果您需要处理也包含小数点的敏感信息,我建议您通过乘以分数将其转化为整数。

所以 100.54 美元变成 10054。完成所有计算后,您可以再除以分数。

例子:

$build['total'] = -11.5;
$build['delivery'] = 11.5;

var_dump(
    $build['total'], // float(-11.5)
    $build['delivery'], // float(11.5)
    (int)($build['total']*1000)+(int)($build['delivery']*1000) // int(0)
    (int)(round($build['total'], 4)*1000)+(int)(round($build['delivery'], 4)*1000) // int(0)
);

关于php - 当-11.5加11.5等于float(2.8421709430404E-14),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990335/

相关文章:

php - 按数组中的指定列对行进行分组

javascript - 使用 javascript 和 jquery 进行回调

php - 在数据库内容中插入包含内容

php - 在 Yii2 Controller 中返回 json 的正确方法

php - 将表的 id 调用到新表并将值插入到该新表中

php - 多个表中的查询中的多个 sun 函数

PHP json_encode 具有资源类型的 debug_backtrace()

php - 如何在 WooCommerce 上设置 Paypal?

php - 活泼 & wkhtmltopdf : page numbering in footer

php - utf8_general_ci 数据应该如何存储?