Перетворити рядок з комою на ціле число


95

Чи існує якийсь акуратний метод перетворення "1,112" у ціле число 1112, а не 1?

У мене є, але не акуратний:

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

Відповіді:


175

Як щодо цього?

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

Дякую за вашу відповідь. Це набагато краще, ніж у мене. Насправді я сподівався, що буде один дзвінок замість двох. наприклад: "1112" .to_money. Переглянувши відповіді, швидше за все, такого методу немає. У будь-якому разі, велике спасибі!
mCY

@michealKohi чи можете ви сказати мені, чому delete () набагато швидше, ніж робити те саме в gsub, який приймає регулярні вирази, я завжди думав, що регулярний вираз є швидшим. Я провів Benchmark на обох з огляду на величезну різницю у часі виконання.
Абхінай

1
@Abhinay Щодо вашої оцінки: обсяг вибірки? Розмір рядка?
Michael Kohl

5

Ви також можете переконатися, що ваш код правильно локалізований, або переконатися, що користувачі звикли до "міжнародної" нотації. Наприклад, "1112" насправді означає різні цифри в різних країнах. У Німеччині це означає цифру трохи більше одиниці, а не тисячу і дещо.

Відповідна стаття у Вікіпедії знаходиться на веб-сайті http://en.wikipedia.org/wiki/Decimal_mark . Здається, в цей час це написано погано. Наприклад, як китайський, я не впевнений, звідки взявся цей опис про тисячу сепараторів у Китаї.


4

Деякі зручніші

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

це змушує "1 200 200" працювати належним чином


8
Ще краще '1,1200.00'.gsub(/[^0-9\.]/,'').to_f.
Hauleth

7
Зачекайте, чому ви хочете перетворити "1,1200.00"в "1120000"? Ви просто не хочете замінити ,(або, залежно від локалі .,?)? Крім того, це не перетворює його на ціле число або плаваюче число, це просто рядок без роздільників.
brymck

3
@Bryan: Для того, щоб здогадатися, можливо, ви захочете зробити це в банківській програмі, коли конвертуєте суму валюти, яку користувач ввів, щоб мати справу лише з цілими числами всередині програми: наприклад, конвертувати долари та центи в центи. . Цей метод дозволить уникнути помилок округлення, які можуть несподівано з’явитися при роботі з числами з плаваючою комою. Коли користувачеві потрібно показати суму валюти, відсоткову суму можна перевести в долари та центи. (Хоча це не те, про що питав запитувач.)
Теему Лейсті

2
Ця відповідь навіть не стосується запиту запитувача про перетворення рядка у ціле число або плаваюче число.
LS

2

Далі наведено ще один метод, який буде працювати, хоча, як і в деяких інших методах, він позбавляє знаків після коми.

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


1

Якщо хтось хоче видавати більше, ніж кому, я фанат:

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

Не знаю про продуктивність, але вона більш гнучка, ніж a gsub, тобто:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.