PHP 中的浮点值问题

Problem with a floating point value in PHP

提问人:Marlon 提问时间:5/19/2022 最后编辑:Marlon 更新时间:5/20/2022 访问量:41

问:

我在浮点值转换时遇到问题。我在一个值为 317.46 的类中有一个私有属性。如果我将这个值乘以 100,我应该有 317.46 的值,这似乎是正在发生的事情,但是当我使用 json_encode 时,它会返回另一个值,略小。这是调试控制台的结果:

$this->valor
317.46
$this->valor * 100
31746
json_encode($this->valor * 100)
"31745.99999999999996"

我知道这是由于浮点的存储方式造成的,但在这种情况下,我需要将其“呈现”为整数,否则它会在我调用的 API 中生成错误。在其他语言中,我会将其转换为 int 值,或使用数据类型,例如 ,但据我所知,它在 PHP 中不可用。decimalc#

PHP 浮点

评论


答:

1赞 Barmar 5/20/2022 #1

用于从浮点表示中删除舍入误差。round()

echo json_encode(round($this->valor * 100))

如果这是钱,最好首先使用便士作为表示形式,以避免与小数分数相互转换的问题。