쉼표가있는 숫자를 소수점으로 부동 소수점으로 변환
소수점에 쉼표가 있고 천 단위 구분 기호로 점이있는 가격 목록이 있습니다.
몇 가지 예 :
12,30
116,10
1.563,14
이러한 형식은 타사에서 제공합니다. 나는 그것들을 수레로 변환하고 함께 추가하고 싶습니다.
이를 수행하는 가장 좋은 방법은 무엇입니까? number_format 은이 형식에서 작동하지 않는 것 같고 str_replace 는 각 숫자에 대해 한 번 더해야하므로 과잉처럼 보입니다.
더 좋은 방법이 있습니까? 감사.
str_replace()
점을 제거하는 데 사용 하는 것은 과도하지 않습니다.
$string_number = '1.512.523,55';
// NOTE: You don't really have to use floatval() here, it's just to prove that it's a legitimate float value.
$number = floatval(str_replace(',', '.', str_replace('.', '', $string_number)));
// At this point, $number is a "natural" float.
print $number;
이것은 당신이 이것을 할 수있는 가장 적은 CPU 집약적 인 방법이고, 당신이 그것을하기 위해 어떤 멋진 기능을 사용하더라도 이것이 그것이 내부에서하는 일이라는 것입니다.
PHP5.3 이상을 사용하는 경우 numfmt_parse 를 사용 하여 "역 번호 형식"을 수행 할 수 있습니다 . 그렇지 않은 경우 발생을 preg_replace / str_replace로 바꾸는 데 고착했습니다.
NumberFormatter 클래스 를 해당 parse
메서드 와 함께 사용할 수 있습니다 .
이 기능은 소수점이나 쉼표가있는 숫자와 호환됩니다.
function floatvalue($val){
$val = str_replace(",",".",$val);
$val = preg_replace('/\.(?=.*\.)/', '', $val);
return floatval($val);
}
$number = "1.325.125,54";
echo floatvalue($number); // The output is 1325125.54
$number = "1,325,125.54";
echo floatvalue($number); // The output is 1325125.54
파일이나 배열에 있다고 가정하면 일괄 (즉, 한꺼번에) 바꾸기 만 수행합니다.
$input = str_replace(array('.', ','), array('', '.'), $input);
그런 다음 PHP의 느슨하게 입력 된 특성을 최대한 활용하여 거기에서 숫자를 처리합니다.
과도하게 보일 수 있지만 로케일에 관계없이 주어진 형식을 변환합니다.
function normalizeDecimal($val, int $precision = 4): string
{
$input = str_replace(' ', '', $val);
$number = str_replace(',', '.', $input);
if (strpos($number, '.')) {
$groups = explode('.', str_replace(',', '.', $number));
$lastGroup = array_pop($groups);
$number = implode('', $groups) . '.' . $lastGroup;
}
return bcadd($number, 0, $precision);
}
산출:
.12 -> 0.1200
123 -> 123.0000
123.91 -> 12345678.9100
123 456 78.91 -> 12345678.9100
123,456,78.91 -> 12345678.9100
123.456.78,91 -> 12345678.9100
123 456 78,91 -> 12345678.9100
PHP 매뉴얼에서 :
str_replace — 모든 검색 문자열을 대체 문자열로 대체합니다.
I would go down that route, and then convert from string to float - floatval
참고URL : https://stackoverflow.com/questions/4325363/converting-a-number-with-comma-as-decimal-point-to-float
'Program Tip' 카테고리의 다른 글
& to & etc로 변환 (0) | 2020.12.10 |
---|---|
C에서 참과 거짓 사용 (0) | 2020.12.10 |
Devise-이메일을 보내지 않고 확인 된 사용자 계정을 만드시겠습니까? (0) | 2020.12.10 |
Android Webview에서 JavaScript가 작동하지 않습니까? (0) | 2020.12.10 |
Vim으로 괄호로 묶기 (0) | 2020.12.10 |