PHP号码:小数点只有在需要时才可见

我想知道是否存在一些函数自动格式化一个数字的小数,所以如果我有:

<?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 ?> 

我其实认为你的解决方法是一样的好。 这很简单明了,在这里没有关于性能的说法,所以就去做吧。

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 

正如埃米尔所说的你是好的。 但是,如果你想从例如7.50删除0 ,我有一个build议, rtrim()

 <?php // if $sql_result["col_number"] == 1,455.50 rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.'); // will return 1455.5 ?> 

我添加了文章从PHP中的小数点删除无用的零数字作为一个更好的方法来清除没有十进制小数的值,如果需要的话。

你也可以使用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) 

其实我觉得最简洁的方法就是做一个这样的人来做一个search寻找这样的事情的人:

 ( number_format ($sql_result["col_number"], 2) * 100 ) / 100; 

Warren.S回答帮助我。 我不需要number_format函数,所以我只是做了这个

 $value=$value-0; 

但在OP的情况下,他需要number_format来删除逗号。 所以这对他有用

 $value=number_format ($sql_result["col_number"], 2, ".", "")-0; 

由于找不到灵活的解决scheme,我写了一个简单的函数来获得最好的结果:

 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); } 

如果您的目标是美国货币,我喜欢使用这种方法:

 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 

关于什么

 number_format($value,2) - 0;