PHP 数字:小数点仅在需要时可见
Posted
技术标签:
【中文标题】PHP 数字:小数点仅在需要时可见【英文标题】:PHP number: decimal point visible only if needed 【发布时间】:2011-05-06 00:28:48 【问题描述】:我想知道是否存在一些自动格式化数字的函数,如果我有的话:
<?php
// $sql_result["col_number"] == 1,455.75
number_format ($sql_result["col_number"], 2, ".", "");
// will return 1455.75
// $sql_result["col_number"] == 1,455.00
number_format ($sql_result["col_number"], 2, ".", "");
// could I get 1455 instead of 1455.00?
?>
所以我的回答是,如果我的数据库中只有当它是圆形的时候才具有 DECIMAL 数据格式,是否存在某种删除小数的方法?
或者我应该这样做吗?
<?php
// $sql_result["col_number"] == 1,455.00
str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", ""));
// will return 1455
?>
【问题讨论】:
这是一个简洁的答案:***.com/a/14531760/1431728 @JohnK,我刚刚意识到您提供的链接也是他去年提出的。哈哈哈 【参考方案1】:floatval 或简单地转换为浮动
php > echo floatval(7.00);
7
php > echo floatval(2.30);
2.3
php > echo floatval(1.25);
1.25
php > echo floatval(1.125);
1.125
php > echo (float) 7.00;
7
php > echo (float) 2.30;
2.3
php > echo (float) 1.25;
1.25
php > echo (float) 1.125;
1.125
【讨论】:
转换为浮动是迄今为止最好的选择 任何想要将此应用于字符串的人都应该注意带有逗号的值,例如“1,000.99” 浮动此值将返回 1。 @YohanesAI 我知道。我在警告人们。【参考方案2】:我实际上认为您的解决方法与任何解决方法一样好。简单明了,这里谈性能也没啥意义,干吧。
【讨论】:
你可以简单地加01455.00 + 0
***.com/questions/14531679/…
替换解决方法将破坏以欧洲国家格式表示的数字,例如德国或西班牙。例如,德国的 9,000 是 9.000,00,这将变成 90,00
如何更改小数和千位分隔符? @Farzher【参考方案3】:
正如埃米尔所说,你的很好。但是如果你想从例如删除0
7.50
也有,我有个建议,rtrim()
:
<?php
// if $sql_result["col_number"] == 1,455.50
rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.');
// will return 1455.5
?>
【讨论】:
我认为在这种情况下使用rtrim
会有一个错误,例如rtrim('1230.00','0.');
会给出123而不是1230。
@bobo Halil 给出的代码不存在该错误,该代码使用按顺序执行的 2 个 rtrim。【参考方案4】:
您还可以使用 rtrim(),它会删除多余的 0,在您可能希望保留一位小数但不保留多余的零的情况下。 (例如,4.50 变为 4.5。)还允许您将小数位数从 2 更改为任何其他数字。
rtrim(rtrim((string)number_format($value, 2, ".", ""),"0"),".");
// 4.00 -> 4
// 4.50 -> 4.5
// 4.54000000 -> 4.54 (if you're doing more decimal places)
【讨论】:
如果您有其他字符用于小数分隔,这是最好的方法。 这对我来说似乎已将数字如 10400.00 修剪为 104【参考方案5】:实际上,我认为对于刚刚进行搜索以寻找此类事情的人来说,我能想到的最干净的方法是这样做:
( number_format ($sql_result["col_number"], 2) * 100 ) / 100;
【讨论】:
我很惊讶这没有更多的赞成票,因为这是解决这个问题的最干净/最优雅的解决方案,恕我直言。【参考方案6】:我被指控做了这样的事情:
floatval($foo) == intval($foo) ? number_format($foo) : number_format($foo,2);
【讨论】:
【参考方案7】:我的因为大部分数量或件数都不需要小数,所以这个功能只会在需要的时候显示小数。
str_replace(".00", "", number_format($this->pieces, 2));
【讨论】:
【参考方案8】:如果您以美元为目标,我喜欢使用这种方法:
function moneyform($number, $symbol = true)
return str_replace(".00", "", money_format(($symbol? '%.2n' : "%!n"), $number));
moneyform(1300999);
-->$1,300,999
moneyform(2500.99);
-->$2,500.99
moneyform(2500.99, false);
-->2,500.99
【讨论】:
唯一的问题是money_format
现在已被弃用,将来将被删除.. ref。 php.net/money_format【参考方案9】:
Warren.S 的回答帮助了我。我不需要 number_format 函数,所以我就这样做了
$value=$value-0;
但在 OP 的情况下,他需要 number_format 来删除逗号。所以这对他有用
$value=number_format ($sql_result["col_number"], 2, ".", "")-0;
【讨论】:
【参考方案10】:由于找不到灵活的解决方案,我编写了一个简单的函数来获得最佳结果:
function getValueFormattedWithMinimalDecimals($value, $max_decimals = 2, $dec_point = ',', $thousands_sep = '')
$bestNumberOfDecimals = -1;
$decimal = 0;
while ($decimal <= $max_decimals)
$bestNumberOfDecimals = $decimal;
$valueDecimals = number_format($value, $decimal);
if (floatval($value) == $valueDecimals)
break;
$decimal++;
if($bestNumberOfDecimals > 0 && number_format($value, $bestNumberOfDecimals) == number_format($value, 0))
$bestNumberOfDecimals = 0;
return number_format($value, $bestNumberOfDecimals, $dec_point, $thousands_sep);
【讨论】:
【参考方案11】:怎么样
number_format($value,2) - 0;
【讨论】:
以上是关于PHP 数字:小数点仅在需要时可见的主要内容,如果未能解决你的问题,请参考以下文章