将int转换为float,PHP中的两个十进制值[重复]

Posted

技术标签:

【中文标题】将int转换为float,PHP中的两个十进制值[重复]【英文标题】:Cast int to float, two decimal values in PHP [duplicate] 【发布时间】:2012-10-11 05:10:22 【问题描述】:

可能重复:php: show a number to 2 decimal places

我如何将一个整数,比如$i=50 转换为具有两个十进制值的浮点数:$m=50.00?我试过(float)$i,但没有任何反应。

编辑:

我需要创建$i == $m 以便返回TRUE

【问题讨论】:

php.net/manual/en/function.number-format.php ***.com/questions/1604696/… 另一个用户在发布答案后更改了他的整个问题,使旧答案无用,甚至是错误的。对于问题。 $i==$m 返回true,所以请提供您的真实代码。您确定您没有将stringnumber 进行比较吗? 【参考方案1】:

round((float)$i, 2) 应该可以解决问题。

round 函数是内置的,它将给定的浮点数四舍五入到给定参数中指定的小数位数。

啊,是的,number_format($var, 2) 也不错!

【讨论】:

number_formatsprintf 都比这个解决方案好。 @clenfort 你为什么这么认为? number_format 返回字符串不浮动 .... 我不同意:codepad.viper-7.com/Va7w4j【参考方案2】:

如果您只是使用常规相等运算符 (==) 而不是类型安全的相等运算符 (===),您应该不会有任何问题。

比较具有相同值的双精度整数:

$i = 20;
$m = 20.00;

gettype($i); // integer
gettype($m); // double

$i == $m; // true;
$i === $m; // false, $m is a double and $i is an integer.

如果我们想解决这个问题,我们只需要这样做:

$i = (double)$i;
gettype($i); // double
$i === $m; // true!

【讨论】:

+1 类型 .. 但仍不会将 50.00 作为浮点数返回 .... 参见 codepad.viper-7.com/CCAoaW ... 为什么对var_dump() 的打印方式感兴趣?它只是调试消息,它应该以最简单的方式打印值。 OP 对如何使浮点数(float 和 double 在 php (explained) 中是相同的)等于整数感兴趣。 (float)$i(double)$ivar_dump() 中都返回浮点数,在 gettype() 中返回双倍。 最初的问题是如何打印一个没有小数部分的float,所以它在那里显示零。然后作者改变了问题。而且这个巴巴家伙不了解什么是数据类型以及它们在 PHP 中的工作原理。 那么投射与问题并没有真正的关系。如果我没记错的话,number_format() 或 sprintf() 都不关心参数的类型,只要它是一个数字。【参考方案3】:

对于浮点数,小数位数是一种格式属性,即数字本身不知道这些内容。 float 50 存储为精确整数 50。您需要格式化数字(例如使用 sprintf)以用十进制数字写入。

【讨论】:

如果$i=50 被存储为$m=50.00 而不是$i==$m 将返回TRUE。但是,在我的应用程序中并非如此,它返回 FALSE 不是。但是包含整数的浮点数可以精确地表示这些整数。阅读他们在记忆中的样子,你会发现同样的。 十进制 数字,如 .NET 支持,例如,也存储它们的精度,这就是为什么你可以有一个具有 2 位精度的十进制数字。但不是普通的float $i==$m 返回true$i===$m 返回false,因为=== 运算符还比较您的情况下的intfloat 数据类型,而== 将自动将int 转换为float 以进行比较.实际变量不会受到影响。 Uhm, of course it's a valid floating-point number ???告诉我 php 如何将 50.00 显示为 float ... @Joey 下次在 PHP 上做更多的研究 .. 没有办法得到 50.00 作为浮点数,你得到的只是 php 中的 50。你只能得到它有一个字符串

以上是关于将int转换为float,PHP中的两个十进制值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

float型怎样强制转换成int型

怎么把float型转换成int

使用python中的所有值将数据帧float转换为int

如何将字典中的字符串值转换为 int/float 数据类型?

python中的281610进制之间的转换

阻止 Pandas 将 int 转换为 float