2012-06-20 58 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更好。