форматирование строки в int - PullRequest
2 голосов
/ 28 июня 2010

Когда есть строковое значение, например 3,76, как это можно преобразовать в целое значение в данном случае 376.

Я думал об использовании sprintf для удаления точки, а затем преобразования в int, но не могу понять синтаксис. Как бы я это сделал и это самый лучший способ

Ответы [ 4 ]

2 голосов
/ 28 июня 2010

удалить точку довольно просто:

cent.gsub!(/\./,"")

удалит точку.

Чтобы получить int, просто вызовите целочисленный конструктор:

Integer(cent)

Конечно, вы можете объединить две операции:

Integer(cent.gsub!(/\./,""))
0 голосов
/ 28 июня 2010

Удаление точки работает только в том случае, если у вас всегда есть два десятичных знака, то есть хорошо для «3,76», но не для «3,7» или даже «3».

  • "3,76" => 376
  • "3,7" => 37 вместо 370
  • "3" => 3 вместо 300

Лучшим решением может быть сначала преобразовать его в число с плавающей точкой, затем умножить на 100 и только затем превратить его в тип int с использованием раунда. Если вы можете иметь более 2 десятичных знаков, вам нужно будет выбрать схему округления. Например:

("3.76".to_f * 100.0).round

Обратите внимание, что преобразование из числа с плавающей точкой в ​​int с использованием to_i не является точным , как упомянуто Клинтом в комментарии к этому ответу.

0 голосов
/ 28 июня 2010

Я думаю, что это немного больше руби-иша, чем calilng Integer (цент) и странные замены.

(cent * 100).to_i
0 голосов
/ 28 июня 2010

Я предполагаю, что вы имеете в виду ANSI C и имеете строковое значение, которое вы хотели бы преобразовать в целое число.

int cents = (atof (myString) * 100.0);

atof преобразует строку в двойное число (или число с плавающей запятой в зависимости от компилятора и платформы), затем просто умножьте на 100, чтобы переместить десятичный указатель на два шага вправо.

очень просто:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...