Конвертировать строку валюты в десятичный PHP
Мне нужно преобразовать строку валюты в десятичную для хранения ее в базе данных типа "десятичная (9,2)". Пример:
0 => 0.00
1 => 1.00
1500 => 1500.00
1500,50 => 1500.00
1500.50 => 1500.00
1.500 => 1500.00
1.500,50 => 1500.50
10.550.670,67 => 10550670.00
1.506,0 => 1506.00
Я пробовал с preg_replace
но я не мог.
Как я могу решить эту проблему?
Edit # 1: это моя функция, первая preg_match
работать нормально, теперь мне нужно преобразовать $number
отформатировать "xxxx.xx"
function formatNumber($number) {
$isValid = preg_match("/^[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{1,2})?)$/", $number);
if ($isValid) {
return preg_replace("/^ THIS FAIL $/", "", $number);
}
return 0;
}
Номер имеет только две цифры, я могу искать (,|.)[0-9]{2}
и заменить его на .[0-9]{2}
, (извините, но я плохо с регулярным выражением).
Редактировать № 2:
На моем веб-сайте пользователи могут установить цену, если пользователь из США, он будет использовать 1,222,33 или 1222,33, если пользователь из Аргентины, он будет использовать 1,222,33 или 1222,33, теперь мне нужно преобразовать число в формат 1222.33 для хранения его в базе данных с десятичным типом.
Изменить № 3: Пожалуйста, удалите этот ответ.
2 ответа
Из-за различий в ваших структурах не существует единого решения для всех размеров.
Если бы КАЖДАЯ возможность использовала запятую в качестве десятичного разделителя, это было бы тривиально (через фрагмент кода, предоставленный Марком Б), но ваш 4-й элемент нарушает это правило.
Попробуйте это $variable= number_format((float)$variable, 0, '.00', '');