php - 手动从 php 中的字符串乘以 float 和整数会给出不同的结果

标签 php casting floating-point int rounding

我用我正在处理的代码解决了这个问题,但这让我很烦恼。

我知道在某些情况下 float 会与舍入混淆。 我知道 php 使用类型推断,当您在字符串之间进行算术运算时会自动转换(我的意思是,在我的示例中,在这种特殊情况下)。

“在代码中手动”做同样的事情,160.2 * 50 的结果是 8010,当转换为整数结果时不需要舍入。只是尴尬。 如果有人知道为什么会发生这种情况,它会启发我。

echo "160.2" * "50"; // gives 8010
echo (int) ((float)"160.2" * (int)"50"); // Gives 8009

我解决了这个问题,我的代码现在可以工作了;这只是为了好玩。我想知道 为什么以及如何,php 一步一步搞砸了这个。 php在哪里失去分辨率?在哪一步?

提前致谢:)

最佳答案

PHP 在内部将 (float)"160.2" 表示为 160.19999999995343387126... 的二进制等价物。这将导致乘法结果略小于 8010,这在转换回 int 时会导致截断并导致 8009

二进制中的 160.2 无法完美表示。结果是循环小数,

10100000.00110011001100110011001100110011...

所以你不能指望用float来准确表示。

( Converter )

关于php - 手动从 php 中的字符串乘以 float 和整数会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104062/

相关文章:

php - 使用 NetBeans 调试 PHP?

php - Laravel 5.1 单例总是新实例

php - PHP 表中的换行符

ios - 将 sqlite3_column_value 转换为 Objective C 中的其他数据类型

java - 如何使用泛型类型的构造函数/类型转换

java - 表中异常的 float

php - 使用 Yii 2.0.6 时不显示任何内容

android - 在 Android 应用程序中按下按钮会产生转换错误

c - C语言中的除法

c - 为什么 C 没有无符号 float ?