美元到便士

时间:2010-12-27 23:03:46

标签: php regex decimal currency

我在使用正则表达式时遇到了一些问题我正试图花钱$ 28.84并将其作为便士存入我的数据库。现在我正在使用这个

$amount="$28.84";
$amount_number= ereg_replace("[(^0-9)(.)(0-9){2}]", "", $amount ); //return a decimal
$store_amount = $amount_number*100; //get number of pennies 

我也试图删除“,”“”和任何不是十进制数字的数字。

7 个答案:

答案 0 :(得分:5)

我认为你错了。为什么不替换美元符号,使用floatval然后乘以100.然后使用intval从结果中删除小数,因为您不需要一分钱的分数。

$amount = intval(floatval(str_replace("$", "", $amount))*100);

我没有测试过,但是这样的事情应该可行。

点击此处了解一些人如何处理货币问题。他们有很多方法:
http://php.net/manual/en/function.floatval.php

答案 1 :(得分:4)

假设输入已经过验证,请删除所有非数字,然后使用int_val将结果转换为整数。

我个人会拒绝所有非标准输入,例如$12.3。在我看来,在处理金钱时,你应该严格遵守你接受的输入,而不是试图猜测是什么意思。

答案 2 :(得分:1)

[(^0-9)(.)(0-9){2}]

应该是

[0-9.]

你不能在[]里面使用()。可以在[]中使用的唯一特殊字符是^字符。

答案 3 :(得分:1)

$amount = "$28.84";
$amount = preg_replace("#([^0-9\.]+)#", "", $amount);
$amount = explode(".", $amount);
$amount = (intval($amount[0]) * 100) + intval($amount[1]);
echo $amount; //2884

答案 4 :(得分:0)

$amount = "$28.84";
$amount_number = floatval(substr($amount,1));
$store_amount = $amount_number*100.0;

您可以使用substr删除美元符号。如果你真的想使用正则表达式,试试这个:

$amount = "$28.84";
$amount_number = floatval(preg_replace('/[^\d\.]/', '', $amount));
$store_amount = $amount_number*100.0;

您需要使用floatval将金额从字符串转换为浮动。

答案 5 :(得分:0)

为什么不将美元符号和倍数删除100?

  

preg_replace(/ \ $ /,“”,$ amount);

答案 6 :(得分:0)

尝试将第二行更改为:

$amount_number= ereg_replace("[^0-9.]", "", $amount );