Доллары до копейки - PullRequest
       8

Доллары до копейки

1 голос
/ 28 декабря 2010

У меня возникли некоторые проблемы с Regex. Я пытаюсь взять сумму в размере 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 ]

5 голосов
/ 28 декабря 2010

Я думаю, вы ошибаетесь.Почему бы не заменить знак доллара, используйте floatval, а затем умножьте на 100. Затем используйте intval, чтобы избавиться от десятичной дроби из результата, поскольку вы не хотите, чтобы доли копейки.

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

Я не проверял это, но что-то вроде этого должно работать.

Узнайте, как некоторые люди обращаются с валютой.У них много методов:
http://php.net/manual/en/function.floatval.php

4 голосов
/ 28 декабря 2010

Предполагая, что входные данные уже были проверены, удалите все нецифровые символы, затем преобразуйте результат в целое число, используя int_val.

Лично я бы отклонил все нестандартные данные, такие как $12.3. По моему мнению, имея дело с деньгами, вы должны быть строгими в отношении того, что вы принимаете, и не пытаться угадать, что это значит.

1 голос
/ 28 декабря 2010
$amount = "$28.84";
$amount = preg_replace("#([^0-9\.]+)#", "", $amount);
$amount = explode(".", $amount);
$amount = (intval($amount[0]) * 100) + intval($amount[1]);
echo $amount; //2884
1 голос
/ 28 декабря 2010
[(^0-9)(.)(0-9){2}]

должно быть

[0-9.]

Вы не можете использовать () внутри []. Единственный специальный символ, который можно использовать внутри [], это символ ^.

0 голосов
/ 28 декабря 2010

Попробуйте изменить вторую строку следующим образом:

$amount_number= ereg_replace("[^0-9.]", "", $amount ); 
0 голосов
/ 28 декабря 2010

Почему бы вам просто не убрать знак доллара и умножить его на 100?

preg_replace (/ \ $ /, "", сумма $);

0 голосов
/ 28 декабря 2010
$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, чтобы преобразовать сумму из строки в число с плавающей точкой.

...