【问题标题】:Advanced Php Number Formatting高级 PHP 数字格式
【发布时间】:2011-09-14 23:39:51
【问题描述】:

我想要一个 PHP 数字,其格式至少为 2 位小数,最多为 8 位小数。你怎么能正确地做到这一点。

更新:对不起,我的问题是我有数字“4”。我希望它显示为“4.00”,如果我有“2.000000001”,那么它会显示为“2.00”,或者如果我有“3.2102”,它将显示为这样。 iPhone 上有一个 NSNumber 格式化程序,在 PHP 中有什么等价的。

【问题讨论】:

  • 您建议如何确定给定数字使用的小数位数?
  • 2.120000001 显示多少?
  • 对不起,我的问题是我有数字“4”。我希望它显示为“4.00”,如果我有“2.000000001”,那么它会显示为“2.00”,或者如果我有“3.2102”,它将显示为这样。 iPhone 上有一个 NSNumber 格式化程序,在 PHP 中是等价的。
  • 您能否提供一些示例并告诉我们您尝试了什么以及为什么没有成功?
  • 我刚刚显示了原始数字。我想听听有经验的人的意见,所以我不会花几个小时做完全偏离轨道的事情。我知道外面有人知道他们在做什么! (:

标签: php number-formatting


【解决方案1】:

这会将 $n 数字格式化为 8 位小数,然后删除尾随的零,最多 6 次。

$s = number_format($n, 8);
for($i=0; $i<8-2; $i++) {
    if (substr($s, -1) == '0')
        $s = substr($s, 0, -1);
}
print "Number = $s";

【讨论】:

  • 哇!那很聪明。让我试试
  • 工作就像一个魅力非常感谢
  • 如果号码是 40.0012,这是否有效?还要多解释一下您的答案,而不仅仅是发布代码。
  • @JPM:将数字格式化为 8 位小数,然后删除尾随零,最多 6 次。这是一个非常明显的代码.. 真的需要解释吗?
  • @yi_H:如果有人是新的 PHP 程序员,他不会理解。
【解决方案2】:

使用sprintf() 将数字格式化为一定的小数位数:

$decimal_places = 4;
$format = "%.${decimal_places}f";
$formatted = sprintf($format,$number);

【讨论】:

  • 对不起,我的问题是我有数字“4”。我希望它显示为“4.00”,如果我有“2.000000001”,那么它会显示为“2.00”,或者如果我有“3.2102”,它将显示为这样。 iPhone 上有一个 NSNumber 格式化程序,在 PHP 中是等价的。
【解决方案3】:

我不明白您为什么要以不一致的准确度显示数字。我也不明白你想在评论中描述什么模式。

但是让我们假设您想要以下行为:您想要将数字表示为 8 位小数,并且如果结果中有超过 2 个尾随零,您想要删除多余的零。这并不比用英语表达难多少。在伪代码中:

$mystring = string representation of number rounded to 8 decimal places;
while (last character of $mystring is a 0) {
    chop off last character of $mystring;
}

【讨论】:

  • 我正在格式化比特币金额,女巫被计算到小数点后 8 位,并且始终显示至少 2 位小数。
【解决方案4】:

检查数字格式功能:

<?php
$num = 43.43343;
$formatted = number_format(round((float) $num, 2), 2);
?>

http://php.net/manual/en/function.number-format.php

【讨论】:

【解决方案5】:

使用 preg_match 只需得到零结尾,然后 rtim 它

<?php 
$nn = number_format(10.10100011411100000,13);
preg_match('/[0]+$/',$nn,$number);
if(count($number)>0){
    echo rtrim($nn,$number[0]);
}

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多