2016-05-13 67 views
3

是否有內置/整潔的方式來格式化數字(就像number_format一樣),但沒有任何舍入起伏?帶有可變小數位數字格式

例如,數1234.234格式應爲1,234.234和另一個號碼1234格式應爲1,234(即沒有任何尾隨.000)爲

回答

1
rtrim(number_format(1234.234, 3),'.0'); 
rtrim(number_format(1234, 3),'.0'); 
+0

與其粘貼一堆隨機的代碼,不如說明你做了什麼以及爲什麼。這樣,OP和任何具有相同問題的未來讀者實際上可以從你的答案中學到一些東西,而不僅僅是複製/粘貼它,明天又問同樣的問題。 – Oldskool

+0

需要什麼樣的解釋?我們格式化數字和修剪尾隨零? – arhey

+0

本身你的回答並不能解釋這就是代碼的作用。這只是一些代碼,所以現在的答案假設你知道什麼是rtrim(),甚至是什麼意思。 – Oldskool

2

您可以定義簡單的自定義功能:

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

謝謝!好的解決方案,但我更喜歡@ arhey的解決方案,因爲它不涉及編寫自己的功能。 – AVK

+0

解決方法如果在點後有動態位數(例如12345.1313131或1234.4321),則無法解決問題。有了這樣的功能,你不需要關心長度。但如果涵蓋您的需求是好的。 – mitkosoft

0

讓我們從那開始在PHP中沒有小數類型。只有浮球。

如果你知道float是如何工作的,那麼你知道通常不可能存儲你認爲具有的精確十進制值,但它是一個近似值。這是因爲你不能在二進制系統中表達大部分的十進制數。

因此,如果你說:

$number = 1234.234; 

那麼你有一個浮動是接近這個數值。真正的價值是:

1234.23399999999992360244505107402801513671875 

因此,PHP不能只是猜測你想如何舍入它。它需要明確指定。

+0

我非常清楚浮動是如何工作的,即時消息不會尋找PHP來猜測任何東西。我只是不想在我格式化的數字中添加任何不必要的填充0。作爲一個例子,你可以看看http://numeraljs.com/ – AVK

+0

但事實是,實際上,一旦你有浮動變量,通常沒有0,但其他數字,正如我在我的答案中顯示你。 JS也不是一個好例子。看看這個:http://www.w3schools.com/js/js_numbers.asp,Precision secion。它表明你並不總是按照你的期望工作。是的,有時候JS會猜測如何編號應該看起來像。 –

0

您可以使用函數:

<?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 
相關問題