2012-06-20 86 views
1

我需要知道如何採取PHP貨幣採取

10.25,並把它轉化爲1025

基本上需要從任何數量例如刪除句號 1500.25它應該是150025

+0

1500.25是浮點還是字符串? –

回答

5
$number = str_replace('.','',$number); 
+1

str_replace可以工作,但如果他的值是10.3567(例如,平均成本)呢?無論輸入是什麼,下面的答案(乘以100並且轉換爲int)都將起作用。 – Fluffeh

+0

如果$ number是一個浮點值,這真的很危險。如果浮點數不能精確地描述該值並且出現幾個小數位,會發生什麼情況?如果值是'1500.3',會發生什麼? –

+0

@Fluffeh,@EmilVikström。我們不能真正解決op **的問題**,因爲我們不知道問題是什麼。我們所能做的只是回答**問題**。問題是:「如何將10.25轉換爲1025」,所以答案是使用'str_replace',它可以在這裏工作。如果問題不符合問題 – k102

2

如果貨幣是float:用100乘以(並把結果到int)。

$currency = 10.25; 
$number = (int)($currency * 100); //1025 

請注意,此解決方案將只得到前兩個小數保存 - 如果你有一些像10.123,在3將簡單地沒有四捨五入切斷。

+0

當處理需要精確的值時(貨幣處理必須始終準確),應避免浮點算術。 –

+1

你是絕對正確的,但是如果它之前是浮點數,那麼你已經有可能被編譯出來,因爲可能使用它來計算其他東西。如果你想確切地說,在任何地方都要使用實數,並且只是爲了顯示而使浮點數顯示出來 - 但這顯然不是這種情況,因爲應該沒有任何理由退回。 – oezi

+0

但是我們知道這是一個浮動值嗎?這可能是一個字符串,在這種情況下,您的解決方案將其轉換爲浮點數。我認爲這是最好的解決方案,如果$貨幣已經是一個浮動(我幾乎發佈完全相同的答案),但如果它實際上是一個字符串,你應該做字符串工作。 –

2

浮點算術是由它的定義不準確。因此,如果它是一個字符串,則不要將該值轉換爲浮點值,並且如果它是浮點值,則不要將其轉換爲字符串。

這裏是一個函數,它負責檢查值類型:

function toCents($value) { 
    // Strings with a dot is specially handled 
    // so they won't be converted to float 
    if (is_string($value) && strpos($value, '.') !== false) { 
    list($integer, $decimals) = explode('.', $value); 
    $decimals = (int) substr($decimals . '00', 0, 2); 
    return ((int) $integer) * 100 + $decimals; 

    // float values are rounded to avoid errors when a value 
    // like ".10" is saved as ".099" 
    } elseif (is_float($value) { 
    return round($value * 100); 

    // Other values are strings or integers, which are cast 
    // to int and multiplied directly. 
    } else { 
    return ((int) $value) * 100; 
    } 
} 
+0

+1爲完整答案:) – k102

0
如果你想更換隻有一個字符,使用strtr函數的效率,而不是str_replace函數

$number = str_replace('.','',$number); 

$number = strtr($number, array('.', '')); 

相同的輸出,但strtr更好。