Как удалить запятую в массиве строк для преобразования в массив с плавающей точкой - PullRequest
0 голосов
/ 26 января 2020

У меня есть массив строк:

my_array = ["$8,579.06", "$166.37", "$0.226463", "$346.31", "$275.27"]

Я хочу получить новый массив:

my_array = [8,579.06, 166.37, 0.226463, 346.31, 275.27]

Я хочу удалить $ и преобразовать значения в числа с плавающей точкой Я сделал это:

my_array.map! { |v| v.delete_prefix("$").to_f}

Но это вернулось:

my_array = [8.0, 166.37, 0.226463, 346.31, 275.27]

Я думаю, что это из-за запятой, но мой массив огромен. Как удалить все запятые каждого значения, не удаляя те, которые разделяют разные индексы в моем массиве?

Ответы [ 2 ]

3 голосов
/ 26 января 2020

Я думаю, что это идет в соответствии с документами:

... Посторонние символы после конца действительного числа игнорируются ...

Вы получая просто «8.0», потому что все оставшиеся после 8 символы игнорируются, так как запятая не может быть интерпретирована как число с плавающей запятой. Что было бы то же самое, что делает "8".to_f и дает 8.0.

Чтобы избежать этого, вы можете попытаться удалить запятые на элемент внутри массива:

["$8,579.06", "$166.37", "$0.226463", "$346.31", "$275.27"].map { |e| e.delete_prefix("$").delete(',').to_f }
# [8579.06, 166.37, 0.226463, 346.31, 275.27]
2 голосов
/ 26 января 2020

Я бы сделал это:

ary = ["$8,579.06", "$166.37", "$0.226463", "$346.31", "$275.27"]
ary.map { |i| i.delete('$,').to_f }
# => [8579.06, 166.37, 0.226463, 346.31, 275.27]

delete - это часть волхвов c. Он удаляет любые символы, названные в параметре, из строки.

Запятые в видимом / экранном отображении чисел, обозначающих тысячи, являются человеческим искусством, чтобы нам было легче измерять величину числа. Компьютеры не нуждаются в них.

Присвойте возвращаемое значение из map переменной или цепочке к ней.

И, в качестве подсказки, учтите, что разные регионы мира используют два разных способа обозначения тысячи и десятичная точка. Некоторые используют 1,000.00, а некоторые 1.000,00. Предполагая, что строковое представление валюты имеет запятые для тысяч, а точка для дробной части является источником ошибки, довольно серьезной ошибки, если вы имеете дело с деньгами, особенно если вы делаете финансовые расчеты по кредитам. В вашем примере вы могли бы написать код, чтобы определить, что значения основаны на США из-за $, но без этого вам будет труднее сказать. Так что, если это то, что вы ожидаете сделать, я настоятельно рекомендую исследовать проблемы и решения.

...