【问题标题】:number_format is rounding final decimal numbers and increasing to next round decimal numbernumber_format 正在四舍五入最终十进制数并增加到下一轮十进制数
【发布时间】:2012-11-17 20:59:41
【问题描述】:

我的 MySQL 表中有一个 DOUBLE 数据类型列,我的值为:

14.5299

但是 PHP number_format 将该值四舍五入为:

14.5300 

如果我只是echo 14.5299,它会输出:

14.53

如何输出14.5299 而不在我的 HTML 标记中硬编码任何内容?

【问题讨论】:

标签: php decimal rounding number-formatting decimal-point


【解决方案1】:

使用sprintf()

echo sprintf("%2.4f", 14.5399);

文档:http://us2.php.net/sprintf

【讨论】:

  • 只是为了澄清...%2 表示浮点数前 2 位 .4 表示浮点数后 4 位。因此,您可以根据需要进行调整。例如:%4.3f 可能是 3333.333。
  • 这很好用......就像 number_format() - 它们是相同的解决方案。
【解决方案2】:

这对我有用:

<?php
$double = 14.5299;
echo number_format(floor($double*100)/100, 2);
?>

结果是:14.52

【讨论】:

  • 这不是我想要的,我需要四位不四舍五入的小数。
【解决方案3】:
$double = 14.5299;
var_dump( number_format($double, 4, '.', ',') );

...打印:

string(7) "14.5299"

...正如预期的那样。

我有根据的猜测是,您的号码实际上有更多的 9:

$double = 14.52999;

...在这种情况下,14.5300 是正确的舍入方式。

【讨论】:

    【解决方案4】:

    下一个功能应该可以工作:

    function fixedNumberFormat($float, $decimals, $withFormat = true) {
       $decPoint = ($withFormat) ? "," : null;
       $thousandsSep = ($withFormat) ? "," : null;
       return substr(number_format($float, $decimals + 1), 0, -1);
    }
    
    fixedNumberFormat(14.5299, 4);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2012-11-10
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多