高级 PHP 数字格式
Posted
技术标签:
【中文标题】高级 PHP 数字格式【英文标题】:Advanced Php Number Formatting 【发布时间】: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 中是等价的。
您能否提供一些示例并告诉我们您尝试了什么以及为什么没有成功?
我刚刚显示了原始数字。我想听听有经验的人的意见,所以我不会花几个小时做完全偏离轨道的事情。我知道外面有人知道他们在做什么! (:
【参考方案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_placesf";
$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
【讨论】:
您可以对数字 (php.net/manual/en/function.round.php) 进行四舍五入,然后使用 number_format() 函数添加格式。【参考方案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]);
希望对你有所帮助。
【讨论】:
以上是关于高级 PHP 数字格式的主要内容,如果未能解决你的问题,请参考以下文章