【问题标题】:PHP long decimal number issuePHP长十进制数问题
【发布时间】:2011-06-03 17:11:47
【问题描述】:

我正在使用 php 解析 xml,我的一个变量收到一个长十进制值。

$ctr = 0.00529440333938;

但我需要将这个数字设为 0.52%,所以我尝试乘以 100 并强制保留 2 位小数。

$real_ctr = $ctr * 100;
echo number_format($real_ctr, 2) . "%";

我得到的结果是 0.00% 而不是 0f 0.52%

然后我尝试添加 1 只是为了测试目的

$real_ctr = $ctr + 1;

我得到的结果是 0.005294403339381。它在末尾添加 1。

有什么建议可以解决这个问题吗?

【问题讨论】:

  • 有趣,代码对我有用……我的输出中得到了 0.53%。可能是php版本或者ini冲突?

标签: php long-integer number-formatting


【解决方案1】:

这对我有用:

$ctr = 0.00529440333938; 

$real_ctr = (double)$ctr * 100; 
$real_ctr = number_format($real_ctr, 2, ".", "") . "%";
$real_ctr = $ctr + 1;

如果您不住在英国,请使用 number_format($real_ctr, 2, ".", "")。

【讨论】:

    【解决方案2】:

    它接缝$ctr 你从 XML 解析器得到的是一个字符串。使用:

    $ctr = floatval($ctr); // or (double)$ctr; or (float)$ctr;
    

    确保您的变量是浮点数。

    【讨论】:

    • 非常感谢。是的,这个值似乎是一个字符串,而 floatval($ctr) 解决了这个问题。
    • 请注意我在这里的回答中提到的 - 浮点数和数学会导致一些意想不到的结果!
    【解决方案3】:

    浮点型和双精度型变量的本质是不能依赖它们来保证最后一位数的准确性。查看手册:http://php.net/manual/en/language.types.float.php

    在使用浮点数之前了解它们很重要 - 如果您进行任何类型的财务计算,由于其固有的不精确性,浮点数会给您带来意想不到的结果。如果您需要精确的结果,最好坚持双打,尤其是如果您正在处理与金钱相关的任何事情。

    因此,请确保您使用的是您期望的数字类型。由于 PHP 的松散类型,您遇到了数字变成浮点数/双精度数的问题。查看关于 type-juggling 的文档:http://www.php.net/manual/en/language.types.type-juggling.php,那里可能有一些有用的信息。

    基本上,您需要确保您的数字在计算中保持为整数,您需要防止 PHP 为您“决定”类型。查看 intval 或 BC 精度数学函数,如果您需要深入了解:http://www.php.net/manual/en/ref.bc.php

    【讨论】:

      【解决方案4】:

      它被读取为一个字符串。您是从字面上将其设置为等于 0.00529440333938,还是将其设置为等于您认为等于 0.00529440333938 的值?在赋值语句之后试试这个,看看它是否有效:

      $ctr = floatval($ctr);
      

      【讨论】:

      • 非常感谢大家的快速响应。是的,这个值似乎是一个字符串,而 floatval($ctr) 解决了这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多