쉼표가있는 문자열을 정수로 변환


95

"1,112"를 1 대신 정수 1112로 변환하는 깔끔한 방법이 있습니까?

하나 있지만 깔끔하지는 않습니다.

"1,112".split(',').join.to_i #=> 1112

답변:


175

이건 어때요?

 "1,112".delete(',').to_i

답변 해 주셔서 감사합니다. 나보다 훨씬 낫다. 사실 나는 두 번이 아닌 한 번의 전화가 있기를 바랐습니다. 예 : "1,112".to_money. 답변을 검토 한 후에는 그러한 방법이 없을 것입니다. 어쨌든 정말 감사합니다!
mCY

@michealKohi 당신은 왜 delete ()가 정규식을 받아들이는 gsub에서 똑같은 일을하는 것보다 훨씬 빠르다고 말할 수 있습니까? 나는 항상 정규식 방식이 더 빠르다고 생각했습니다. 실행 시간의 큰 차이에 대해 둘 다 벤치 마크를 실행했습니다.
Abhinay 2014-08-29

1
@Abhinay 벤치 마크와 관련하여 : 샘플 크기? 문자열 크기?
Michael Kohl

5

코드가 올바르게 현지화되는지 확인하거나 사용자가 "국제"표기법에 익숙한 지 확인할 수도 있습니다. 예를 들어 '1,112'는 실제로 국가마다 다른 숫자를 의미합니다. 독일에서는 1000 개가 아니라 1 개를 조금 넘는 숫자를 의미합니다.

해당 Wikipedia 기사는 http://en.wikipedia.org/wiki/Decimal_mark에 있습니다. 그러나 현재로서는 제대로 쓰여지지 않은 것 같습니다. 예를 들어 중국인으로서 저는 중국에서 천 단위 구분 기호에 대한 이러한 설명이 어디에서 왔는지 잘 모르겠습니다.


4

좀 더 편리한

"1,1200.00".gsub(/[^0-9]/,'') 

"1200200"도 제대로 작동합니다.


8
더 나은 것은 '1,1200.00'.gsub(/[^0-9\.]/,'').to_f입니다.
Hauleth

7
잠깐, 왜로 변환 "1,1200.00"하고 "1120000"싶습니까? ,(또는 로케일에 따라) 를 바꾸고 싶지 .않습니까? 또한 이것은 정수 또는 부동 소수점으로 변환하지 않고 구분 기호가없는 문자열로만 변환됩니다.
brymck

3
@Bryan : 추측을 시도하려면 은행 애플리케이션에서이 작업을 수행 할 수 있습니다. 사용자가 입력 한 통화 금액을 변환 할 때 애플리케이션 내에서 정수만 처리하기 위해 (예 : 달러와 센트를 센트로 변환) . 이 방법은 부동 소수점 숫자를 처리 할 때 예기치 않게 발생할 수있는 반올림 오류를 방지합니다. 사용자에게 통화 금액을 표시해야 할 때 센트 금액을 달러와 센트로 변환 할 수 있습니다. (즉 아니지만 질문자 약을 무엇을 요구.)
티무 Leisti

2
이 답변은 문자열을 정수 또는 부동 소수점으로 변환하라는 요청자의 요청을 처리하지 않습니다.
LS

2

다음은 다른 방법과 마찬가지로 소수점 이하 자릿수를 제거하지만 작동하는 또 다른 방법입니다.

a = 1,112
b = a.scan(/\d+/).join().to_i => 1112


1

누군가가 쉼표보다 더 많은 하위 항목을 찾고 있다면 나는 다음의 팬입니다.

"1,200".chars.grep(/\d/).join.to_i

성능에 대해서는 잘 모르지만 gsub, 즉 :

"1-200".chars.grep(/\d/).join.to_i

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.