【问题标题】:Cast int to float, two decimal values in PHP [duplicate]将int转换为float,PHP中的两个十进制值[重复]
【发布时间】: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 casting integer decimal-point


【解决方案1】:

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

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

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

【讨论】:

  • number_formatsprintf 都比这个解决方案好。
  • @clenfort 你为什么这么认为?
  • number_format 返回字符串不浮动 ....
【解决方案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。你只能得到它有一个字符串
猜你喜欢
  • 2015-04-15
  • 2016-11-16
  • 2018-03-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多