Как я могу преобразовать десятичное строковое значение в int в java

#java #string #kotlin #integer

Вопрос:

Я пытаюсь преобразовать строку «3.0» в int в java. Я попытался преобразовать с помощью Integer.parseInt, но это вызывает исключение. Любая идея, как я могу преобразовать строку с десятичными значениями в int в java и kotlin

 String value = "3.0";
int i = Integer.parseInt(value);
 

Комментарии:

1. разберите его на а Double , а затем сделайте .toInt() на нем. Но вам нужно учитывать, что произойдет с такими случаями, как 1.999 вы хотите 1 или 2 для этого и т. Д. Если вы хотите 2 , то это более сложная вещь, вы также можете попробовать Float вместо Double этого .

Ответ №1:

В котлине вы можете сделать это так

 val str = "3.0"
val result = str.toDouble().toInt()
 

Ответ №2:

 String value = "3.0";
int i = (int) Float.parseFloat(value);
 

Комментарии:

1. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и с большей вероятностью привлекут внимание.

Ответ №3:

Преобразуйте строку в целое число, затем проанализируйте:

 int i = Integer.parseInt(str.replaceAll("\..*", ""));
 

Это удаляет точку и все, что после нее, что фактически приводит к преобразованию типа с плавающей запятой в целое число.

Ответ №4:

Вы не можете анализировать "3.0" как целое число, потому что оно представляет значение с плавающей запятой. Лучше всего проанализировать его как таковой, используя удобные встроенные функции ( Double.parseDouble("3.0") или Float.parseFloat("3.0") ), а затем преобразовать его в целое число.

Способ преобразования зависит от того, как вы хотите обрабатывать десятичную часть

  • отбросьте его (число приближается к нулю): приведите к int

    (int) 2.5 = 2 , (int) -2.5 = -2

  • округлите его до ближайшего целого числа: Math.round() , затем приведите*

    (int) Math.round(2.5) = 3 , (int) Math.round(-2.5) = -3

  • округлите до большего целого числа (число движется к положительной бесконечности): Math.ceil() затем приведите

    (int) Math.ceil(2.5) = 3 , (int) Math.ceil(-2.5) = 2

  • округлите до меньшего целого числа (число движется к отрицательной бесконечности): Math.floor() затем приведите

    (int) Math.floor(2.5) = 2 , (int) Math.floor(-2.5) = -3

* Math.round принимает либо a float , либо a double и производит a int или a long соответственно, поэтому вам не нужно приводить int , если вы используете a float . Однако все остальные Math методы требуют double s, поэтому я использую это для согласованности


Котлин-это то же самое, эквиваленты такие:

  • разбор: "2.5".toDouble()
  • десятичное отклонение: 2.5.toInt()
  • обход до ближайшего: 2.5.roundToInt()
  • раунд к более высокому: ceil(2.5).toInt()
  • раунд на понижение: floor(2.5).toInt()

(функции kotlin.math включены )