2014-09-24 73 views
0

在PHP中有沒有number_format備選方案,允許我選擇數千和小數點分隔符,同時保留小數位數?例如。是這樣的:沒有舍入的number_format

number_format_alternative('1234.617', ',', '.'); 

>1 234,617 

number_format_alternative('120.0', ',', '.'); 
>120.0 

我意識到,我可以實現幾乎相同的事情,通過使用一個高得離譜的小數位數,並修剪從右側全部是零,雖然第二然後例如會是什麼樣子:

number_format_alternative(120.0, ',', '.'); 
>120 

 

編輯:這是我落得這樣做:

function numberOfDecimals($number) { 
    return strlen(strstr(rtrim(sprintf('%.10F', $number), '0'), '.'))-1; 
} 

+1

不是我知道,你必須實現你自己的版本。我們擁有'$ decimals'參數的原因是花車的不精確性。 (順便說一句:你的字符串首先被轉換成一個float_index_format,這就是爲什麼關於結尾零的任何信息都會丟失) – bwoebi 2014-09-24 12:48:09

回答

1

既然你正在輸入給函數的數量作爲一個字符串,你可以使用正則表達式,看看有多少數字在小數點後面,用'。'表示。在這種情況下,然後執行number_format,並將$decimals參數設置爲您剛剛計算的數字。

一個正常的表達式可以工作在\.\d+,然後減去長度以找到小數點後的數字,你可以用後面的表達來看看我認爲性能會變差。一些測試可能是需要的,我相信會有其他正則表達式可以工作。

+0

在這種方法中,我甚至不需要一個正則表達式,我可以'strlen(strstr($ val, ''')) - 1' – leo 2014-09-24 13:04:02

+0

@leo使用'strlen(strstr($ val,'。')) - 1'設置'$ decimals'參數可以以相同的方式工作,並且可以比正則表達式運行得稍快函數,儘管我從來沒有在PHP中測試過'strstr'的​​速度。 – Oracle 2014-09-24 13:16:14