是否有內置/整潔的方式來格式化數字(就像number_format
一樣),但沒有任何舍入起伏?帶有可變小數位數字格式
例如,數1234.234
格式應爲1,234.234
和另一個號碼1234
格式應爲1,234
(即沒有任何尾隨.000
)爲
是否有內置/整潔的方式來格式化數字(就像number_format
一樣),但沒有任何舍入起伏?帶有可變小數位數字格式
例如,數1234.234
格式應爲1,234.234
和另一個號碼1234
格式應爲1,234
(即沒有任何尾隨.000
)爲
rtrim(number_format(1234.234, 3),'.0');
rtrim(number_format(1234, 3),'.0');
您可以定義簡單的自定義功能:
<?php
function custom_number_format($number, $decimal = '.')
{
$broken_number = explode($decimal, $number);
if (isset($broken_number[1]))
return number_format($broken_number[0]) . $decimal . $broken_number[1];
else
return number_format($broken_number[0]);
}
$n1 = '1234.234';
$n2 = '1234';
echo custom_number_format($n1);
echo '<br>';
echo custom_number_format($n2);
?>
輸出是:
1,234.234
1,234
讓我們從那開始在PHP中沒有小數類型。只有浮球。
如果你知道float是如何工作的,那麼你知道通常不可能存儲你認爲具有的精確十進制值,但它是一個近似值。這是因爲你不能在二進制系統中表達大部分的十進制數。
因此,如果你說:
$number = 1234.234;
那麼你有一個浮動是接近這個數值。真正的價值是:
1234.23399999999992360244505107402801513671875
因此,PHP不能只是猜測你想如何舍入它。它需要明確指定。
我非常清楚浮動是如何工作的,即時消息不會尋找PHP來猜測任何東西。我只是不想在我格式化的數字中添加任何不必要的填充0。作爲一個例子,你可以看看http://numeraljs.com/ – AVK
但事實是,實際上,一旦你有浮動變量,通常沒有0,但其他數字,正如我在我的答案中顯示你。 JS也不是一個好例子。看看這個:http://www.w3schools.com/js/js_numbers.asp,Precision secion。它表明你並不總是按照你的期望工作。是的,有時候JS會猜測如何編號應該看起來像。 –
您可以使用函數:
<?php
function getNumberFormat($number) {
$numberAr = explode('.', (string)$number);
$count = 0;
if (2 === count($numberAr)) {
$count = strlen($numberAr[1]);
}
return number_format($number, $count, ',', '.');
}
$test1 = 1234.234;
$test2 = 1234;
echo getNumberFormat($test1); //1,234.234
echo getNumberFormat($test2); //1,234
與其粘貼一堆隨機的代碼,不如說明你做了什麼以及爲什麼。這樣,OP和任何具有相同問題的未來讀者實際上可以從你的答案中學到一些東西,而不僅僅是複製/粘貼它,明天又問同樣的問題。 – Oldskool
需要什麼樣的解釋?我們格式化數字和修剪尾隨零? – arhey
本身你的回答並不能解釋這就是代碼的作用。這只是一些代碼,所以現在的答案假設你知道什麼是rtrim(),甚至是什麼意思。 – Oldskool