首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP错误或者我哪里错了?

PHP错误或者我哪里错了?
EN

Stack Overflow用户
提问于 2018-11-29 22:35:31
回答 3查看 138关注 0票数 2
代码语言:javascript
运行
复制
function dec2sat( $decimal )
{
    return $decimal * (10**8);
}

echo dec2sat(0.06999206); // result: 6999206 (float type)

var_dump(dec2sat(0.06999206) >= 6999206); // result: FALSE

请大家给我解释一下为什么var_dump(dec2sat(0.06999206) >= 6999206);返回FALSE?

测试: PHP 7.2.12、PHP 7.1.22、PHP 5.6.38

EN

Stack Overflow用户

发布于 2018-11-30 13:05:13

我想说的第一件事是:非常感谢您花时间寻找我的问题的解决方案。我的问题的主要目的不是找出解决方案,我需要知道导致上述意外结果的原因,因为这有助于我避免以后重复。

在看了Aleksandar Raki的答案后,我在ć中做了一些关于浮点型的搜索,现在,我想我已经找到了导致var_dump(dec2sat(0.06999206) >= 6999206);返回FALSE的原因。你可以在这里阅读:Warning: Floating point precision

我认为数字0.06999206不是真正的0.06999206,它在内部存储时可能是0.069992059999...,函数dec2sat(0.06999206)的结果是6999205.999...这就是为什么Aleksandar Rakić的解决方案返回预期结果的原因。

以下是编辑后的dec2sat()

代码语言:javascript
运行
复制
function dec2sat( $decimal )
{
     return intval(round( $decimal * (10**8) )); // $decimal always has decimal value <= 8 digits
}

函数dec2sat()的主要目标是将floating point number转换为int,以避免在我的应用程序中直接处理floating point number

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53541387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档