2017-10-20 146 views
1

我是新來的PHP,我試圖用number_format數量:修改小數點和千位分隔符不改變小數

number_format (float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = ",") 

正如書名,我的目標是修改小數點千位分隔符不改變的小數位數如下:

$Num=123456.789; 
$Num2=number_format ($Num, [decimals as in $Num], ",", "'"); 

我的結果應該是:

$Num2="123'456,789"; 

編輯

我需要一個代碼,一個未知的小數位數

+0

'$民= 123456,789;'是PHP無效的代碼,它應該是'$民= 123456.789;'有在PHP命名參數,所以你不支持必須將可以看到的默認值傳遞給函數簽名。 – Flying

+0

@飛過我用了一個點,而不是逗號賦值給'$ Num'。代碼是有效的只有最終的輸出需要一個逗號,但它是一個字符串! – genespos

回答

3

您可以使用NumberFormatter

您仍然需要指定一定數量的小數位數,但您可以使用足夠高的值並且沒問題。這不像數字的數量真的是任意的。它綁定到你的precision ini setting

$formatter = new NumberFormatter("en_US", NumberFormatter::DECIMAL); 
$formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 42); 
$formatter->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, "'"); 
$formatter->setSymbol(NumberFormatter::DECIMAL_SEPARATOR_SYMBOL, ","); 
echo $formatter->format(123456.7891234); // 123'456,7891234 

演示https://3v4l.org/TCAIA

+0

不錯,只有缺少格式我猜,「123'456,789」 –

+0

@VuralAcar更新。 – Gordon

+0

感謝您的回答。只有一個問題:它的工作原理就像我想在一個網絡php測試儀,但在我的電腦上我得到錯誤**致命錯誤:類'NumberFormatter'未找到**。我使用xampp和php 5.6.8,我閱讀(在網頁指南)它從5.3版本開始工作**任何提示都很感謝** – genespos

0

的你能做到這樣的方式(先看一看,以@Gordon答案 - 它更越好):

<?php 

function extendedNumberFormat($num, $decimalSeparator, $thousandSeparator) { 
    $asStr = strval($num); 

    $exploded = explode('.', $asStr); 
    $int = $exploded[0]; 
    $decimal = isset($exploded[1]) ? $exploded[1] : null; 

    $result = number_format($int, 0, ".", $thousandSeparator); 
    if ($decimal !== null) { 
     $result .= $decimalSeparator . $decimal; 
    } 

    return $result; 
} 

echo extendedNumberFormat(123456.789, ',', "'") . "\n"; 
echo extendedNumberFormat(123456.7891, ',', "'") . "\n"; 
echo extendedNumberFormat(123456, ',', "'") . "\n"; 

//123'456,789 
//123'456,7891 
//123'456 
相關問題