将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
,所以请提供您的真实代码。您确定您没有将string
与number
进行比较吗?
【参考方案1】:
round((float)$i, 2)
应该可以解决问题。
round
函数是内置的,它将给定的浮点数四舍五入到给定参数中指定的小数位数。
啊,是的,number_format($var, 2)
也不错!
【讨论】:
number_format
和 sprintf
都比这个解决方案好。
@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)$i
在 var_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
,因为===
运算符还比较您的情况下的int
和float
数据类型,而==
将自动将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中的两个十进制值[重复]的主要内容,如果未能解决你的问题,请参考以下文章