Ошибка перевода строки в число

private char whatThing() {
    double random = Math.random();
    String f = String.format("%.2f", random);
    double formattedRandom = Double.parseDouble(f);
    if(formattedRandom < 0.33) {
        return 'R';
    } else if(formattedRandom >= 0.33 && formattedRandom < 0.66) {
        return 'P';
    } else {
        return 'S';
    }
}

Выводит ошибку NumberFormatException:

Exception in thread «main» java.lang.NumberFormatException: For input string:
«0,47»
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at RPSEngine.whatThing(RPSEngine.java:28)
at RPSEngine.(RPSEngine.java:8)
at RPSSheath.(RPSSheath.java:30)
at RPSSheath.main(RPSSheath.java:43)

Mikhail Vaysman's user avatar

задан 10 июл 2017 в 10:18

Viler Viler's user avatar

Viler VilerViler Viler

1911 золотой знак1 серебряный знак11 бронзовых знаков

1

Чтобы получить число с точностью до двух цифр после запятой, нужно указать следующее выражение:

%1$,.2f

Таким образом код будет выглядеть так:

double number = Math.random();
String str = String.format("%1$,.2f", number);
System.out.println(number);
System.out.println(str);

0.3086820994984767
0.31

ответ дан 10 июл 2017 в 10:27

Artem Konovalov's user avatar

Artem KonovalovArtem Konovalov

14.9k1 золотой знак21 серебряный знак39 бронзовых знаков

1

Вот такой вариант делает тоже самое, но проще

private char whatThing() {
    final Random random = new Random();
    int choice = random.nextInt(2);
    switch (choice) {
        case 0:
            return 'R';
        case 1:
            return 'P';
        default:
            return 'S';
    }
}

ответ дан 10 июл 2017 в 11:47

Mikhail Vaysman's user avatar

Mikhail VaysmanMikhail Vaysman

14.2k1 золотой знак20 серебряных знаков31 бронзовый знак

Xenvert

1 / 1 / 0

Регистрация: 29.11.2013

Сообщений: 40

1

02.02.2014, 23:22. Показов 4100. Ответов 19

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

При попытке конвертировать string в int выводятся неправильные значения.
Я ввожу 123, при этом в ответе мне выводятся 49 50 51.

C#
1
2
3
4
5
6
7
8
9
10
11
        {
            string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = Convert.ToInt32(s[i]);
                Console.WriteLine(IntArray[i]);
            }
            Console.ReadKey();
        }

В чем ошибка?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

02.02.2014, 23:22

Ответы с готовыми решениями:

Не преобразовывает int в string (строку)
string z = null;

for (int i = 100000; i &lt; 999999; ++i)
{

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте!

По C# есть задачка, с которой я так и не разобрался :(

Задача:

Создайте…

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population….

Ошибки: Cannot implicitly convert type ‘string’ to ‘int’ и Argument 1: cannot convert from ‘int’ to ‘string’
youtube.com_Пишем парсер на Csharp. Ошибка

Пытаюсь написать парсер.
Вроде сделал всё как в…

19

MansMI

Заблокирован

02.02.2014, 23:42

2

49 50 51 — это коды символов «1» «2» «3», а s[i] — это символ а не строка
попробуйте так:

C#
1
Convert.ToInt32(""+s[i]);



1



pokerface

209 / 174 / 48

Регистрация: 20.09.2012

Сообщений: 481

03.02.2014, 01:02

3

C#
1
2
3
4
5
6
7
8
9
string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = int.Parse(s[i].ToString());
                Console.WriteLine(IntArray[i]);
            }
            Console.ReadKey();



1



SKonst

37 / 25 / 15

Регистрация: 14.12.2013

Сообщений: 67

03.02.2014, 02:52

4

Xenvert,

C#
1
2
3
4
5
6
7
8
9
string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = Console.ReadLine(s[i]);
                Console.WriteLine(IntArray[i]);
            }
            Console.ReadKey();



1



Michael____

1 / 1 / 0

Регистрация: 29.01.2014

Сообщений: 27

03.02.2014, 11:10

5

Вот всё работает.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            int i;
                i = Convert.ToInt32(s);
                  Console.WriteLine(i);
                    Console.ReadKey();
        }
    }
}



1



45 / 45 / 4

Регистрация: 14.02.2013

Сообщений: 139

03.02.2014, 12:52

6

Вместо Convert используйте int.Parse(s[i].ToString());



1



209 / 174 / 48

Регистрация: 20.09.2012

Сообщений: 481

03.02.2014, 14:28

7

Цитата
Сообщение от SKonst
Посмотреть сообщение

IntArray[i] = Console.ReadLine(s[i]);



1



Администратор

Эксперт .NET

9393 / 4677 / 757

Регистрация: 17.04.2012

Сообщений: 9,520

Записей в блоге: 14

03.02.2014, 14:34

8

Цитата
Сообщение от makedonsky94
Посмотреть сообщение

Вместо Convert используйте int.Parse(s[i].ToString());

А в чём преимущество?



1



37 / 25 / 15

Регистрация: 14.12.2013

Сообщений: 67

03.02.2014, 16:02

9

-HPR-, извиняюсь, действительно сильно тупанул)



2



209 / 174 / 48

Регистрация: 20.09.2012

Сообщений: 481

03.02.2014, 16:16

10

В этой ситуации просто надо s[i] перевести в string, а затем в int любым из возможных способов.

Добавлено через 3 минуты

Цитата
Сообщение от Michael____
Посмотреть сообщение

string s = Console.ReadLine();
* * * * * * int i;
* * * * * * * * i = Convert.ToInt32(s);

работает, потому что s — это стринг. А в примере ТС s[i], а значит char. Если присвоить инту чар, то мы получаем номер символа в таблице Юникода.



2



45 / 45 / 4

Регистрация: 14.02.2013

Сообщений: 139

03.02.2014, 19:22

11

Лучший ответ Сообщение было отмечено как решение

Решение

Цитата
Сообщение от tezaurismosis
Посмотреть сообщение

А в чём преимущество?

Для начинающего — это не перепутать в параметрах строку и символ



3



Psilon

Master of Orion

Эксперт .NET

6095 / 4951 / 905

Регистрация: 10.07.2011

Сообщений: 14,522

Записей в блоге: 5

04.02.2014, 01:36

12

makedonsky94, ну а чтобы совсем запутать:

C#
1
2
3
4
5
6
7
8
9
            string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = s[i] - '0';
                Console.WriteLine(IntArray[i]);
            }
            Console.ReadKey();



2



pokerface

209 / 174 / 48

Регистрация: 20.09.2012

Сообщений: 481

04.02.2014, 01:56

13

Ещё одна модификация=)

C#
1
2
3
4
5
6
7
8
9
            string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = Convert.ToInt32(Convert.ToString(s[i]));
                Console.WriteLine(IntArray[i]);
            }
            Console.ReadKey();

Добавлено через 6 минут
или так:

C#
1
2
3
4
5
6
7
8
9
string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = s[i];
                Console.WriteLine((char)IntArray[i]);
            }
            Console.ReadKey();



1



1 / 1 / 0

Регистрация: 29.11.2013

Сообщений: 40

04.02.2014, 16:33

 [ТС]

14

Спасибо всем)



1



Эксперт .NET

17227 / 12679 / 3323

Регистрация: 17.09.2011

Сообщений: 20,950

04.02.2014, 16:56

15

Есть же метод char.GetNumericValue, зачем строки почем зря плодить?



0



pokerface

209 / 174 / 48

Регистрация: 20.09.2012

Сообщений: 481

04.02.2014, 17:04

16

Цитата
Сообщение от kolorotur
Посмотреть сообщение

Есть же метод char.GetNumericValue, зачем строки почем зря плодить?

Не вижу разницы

C#
1
2
3
4
5
6
7
8
9
string s = Console.ReadLine();
            int[] IntArray = new int[s.Length];
 
            for (int i = 0; i < s.Length; i++)
            {
                IntArray[i] = Convert.ToInt32( Char.GetNumericValue(s[i]));
                Console.WriteLine(IntArray[i]);
            }
            Console.ReadKey();



0



Эксперт .NET

17227 / 12679 / 3323

Регистрация: 17.09.2011

Сообщений: 20,950

04.02.2014, 17:23

17

Цитата
Сообщение от -HPR-
Посмотреть сообщение

Не вижу разницы

Лишние строки длиной в один символ в куче не будут плодиться.

Ну, это если не считать правильного преобразования символов, которые представляют собой числа, но не в промежутке 0-9. В данном случае это не играет роли.



1



Psilon

Master of Orion

Эксперт .NET

6095 / 4951 / 905

Регистрация: 10.07.2011

Сообщений: 14,522

Записей в блоге: 5

04.02.2014, 18:40

18

kolorotur, не люблю этот метод, потому что с ним запись слишком длинная

C#
1
int i = (int)char.GetNumericValue(s[i]);

может так и правильнее, но слишком уж нелепо, да еще и с кастом в double и обратно.



0



kolorotur

Эксперт .NET

17227 / 12679 / 3323

Регистрация: 17.09.2011

Сообщений: 20,950

04.02.2014, 19:17

19

Psilon, ну так эстетам шарп предоставляет шикарную возможность присыпать вызов сахарком

C#
1
2
3
4
5
6
7
static class CharExtensions
{
   public static int ToDigit(this char c)
   {
      return (int)char.GetNumericValue(c);
   }
}
C#
1
2
3
4
5
for (int i = 0; i < s.Length; i++)
{
   IntArray[i] = Convert.ToInt32(s[i].ToDigit());
   Console.WriteLine(IntArray[i]);
}



1



Master of Orion

Эксперт .NET

6095 / 4951 / 905

Регистрация: 10.07.2011

Сообщений: 14,522

Записей в блоге: 5

04.02.2014, 23:06

20

kolorotur, только таскать постоянно по проектам замучаешься Хотя я уже видимо дорос до уровня «собственной библиотеки». Видимо через пару лет дорасту до «свой никому не нужный MVVM-фреймворк»



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

04.02.2014, 23:06

Помогаю со студенческими работами здесь

Dictionary<Tuple<string,string>, Dictionary<int,int>> dict — возможно ли?
Собственно вопрос в заголовке. Возможно ли использовать объект вида…

Получить значение value (string) из Dictionary<int, string>
Имеем

Dictionary&lt;int, string&gt; pos = new Dictionary&lt;int, string&gt;;
pos.Add(1,&quot;A&quot;);…

Как преобразовать Dictionary<string, int> в Dictionary<object, int>
Есть метод с сигнатурой

public KeyValuePair&lt;string, int&gt; MyMethod(Dictionary&lt;string, int&gt; dic,…

Неправильно работает string.compare()
Доброго всем времени суток.

Столкнулся с проблемой — не могу решить.

Есть отсортированный…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Проблемы

При попытке отформатировать ячейку как число в Microsoft Excel она будет преобразована в текстовый формат.

Причина

Эта проблема возникает, если выполняются указанные ниже условия.

  • В диалоговом окне Формат ячеек Вы форматируете ячейку как текст.

  • Затем введите число в эту ячейку.

  • В диалоговом окне Формат ячеек можно отформатировать ячейку как число.

Ячейка останется в текстовом формате.

Обходное решение

Чтобы преобразовать в числа ячейки, которые отформатированы как текст, выполните указанные ниже действия.

  1. Выделите ячейку, отформатированную как текст, который нужно преобразовать в число. Обратите внимание на то, что при выборе ячейки или наведении указателя мыши на ячейку появляется кнопка Параметры проверки ошибок . Ячейка должна содержать индикатор ошибки в левом верхнем углу ячейки.Примечание. Если кнопка Параметры проверки ошибок не отображается или индикатор ошибки не отображается, включите фоновую проверку ошибок. Для этого в Microsoft Excel 2002 или Microsoft Office Excel 2003 выполните указанные ниже действия.

    1. В меню Сервис выберите пункт Параметры.

    2. В диалоговом окне Параметры откройте вкладку Проверка ошибок .

    3. В разделе » Параметры » установите флажок Включить фоновый поиск ошибок .

    4. В разделе правила убедитесь, что выбран параметр число сохранено как текстовое правило, и нажмите кнопку ОК.

    Чтобы сделать это в Microsoft Office Excel 2007, выполните указанные ниже действия.

    1. Нажмите кнопку Microsoft Office, затем нажмите кнопку Параметры Excel.

    2. На вкладке формулы установите флажок Включить фоновый поиск ошибок в разделе » Проверка ошибок».

    3. В разделе правила проверки ошибокубедитесь, что установлен флажок числа в текстовом формате или предшествует apostrphe , и нажмите кнопку ОК.

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

  3. Нажмите кнопку преобразовать в число.

Обратите внимание, что ячейка преобразуется в числовой формат, а индикатор ошибки больше не отображается в ячейке.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

I had the same sort of need and found this to work well for me (postgres 8.4):

CAST((COALESCE(myfield,'0')) AS INTEGER)

Some test cases to demonstrate:

db=> select CAST((COALESCE(NULL,'0')) AS INTEGER);
 int4
------
    0
(1 row)

db=> select CAST((COALESCE('','0')) AS INTEGER);
 int4
------
    0
(1 row)

db=> select CAST((COALESCE('4','0')) AS INTEGER);
 int4
------
    4
(1 row)

db=> select CAST((COALESCE('bad','0')) AS INTEGER);
ERROR:  invalid input syntax for integer: "bad"

If you need to handle the possibility of the field having non-numeric text (such as «100bad») you can use regexp_replace to strip non-numeric characters before the cast.

CAST(REGEXP_REPLACE(COALESCE(myfield,'0'), '[^0-9]+', '', 'g') AS INTEGER)

Then text/varchar values like «b3ad5» will also give numbers

db=> select CAST(REGEXP_REPLACE(COALESCE('b3ad5','0'), '[^0-9]+', '', 'g') AS INTEGER);
 regexp_replace
----------------
             35
(1 row)

To address Chris Cogdon’s concern with the solution not giving 0 for all cases, including a case such as «bad» (no digit characters at all), I made this adjusted statement:

CAST((COALESCE(NULLIF(REGEXP_REPLACE(myfield, '[^0-9]+', '', 'g'), ''), '0')) AS INTEGER);

It works similar to the simpler solutions, except will give 0 when the value to convert is non-digit characters only, such as «bad»:

db=> select CAST((COALESCE(NULLIF(REGEXP_REPLACE('no longer bad!', '[^0-9]+', '', 'g'), ''), '0')) AS INTEGER);
     coalesce
----------
        0
(1 row)

Страница 1 из 2

  1. Кто нибудь сталкивался с такой проблемой? Попытка явного перевода из строки в число (int number = int(«21»)) выдаёт ошибку (error: invalid cast from type ‘String’ to type ‘int’), а со строками не очень удобно работать.

  2. Естественно выдает ошибку. Нет в С/C++ такого приведения типов. Используйте atoi() или sscanf().

  3. atoi() — это круть, но просит на вход const char*, а я могу максимум char сделать(
    Где здесь копать?
    Хотя тут char используют…

  4. Там в примере массив символов. :)
    А char [] и char * это, можно сказать, одно и то же.

  5. Может в коде ошибка?

    someint = atoi(strToChar(valvePin);

     
    char strToChar(String str){
      int ln = str.length();
      char rez[ln];
      for(int i = 0; i < ln; i++){
        rez[i] = char(str[i]);
      }
      return rez;
    }

    atoi ругается на то, что это не CONST CHAR…

  6. Так нельзя делать. Сейчас напишу…

    const int n = 10;
    char *z = new char[n];
    String s = «12345»;
    s.toCharArray(z,n);
    int x = atoi(z);
    // …
    delete[] z;
     
  7. Ага, все дело в указателях.

  8. Используйте пока статический массив. Только тогда приведение типов к (char *) руками сделайте.

  9. Вроде работает. Я создал массив (статический) так, что бы с запасом было, а функции toCharArray передаю нужное кол-во символов.

  10. И в 0.22 и в 1.0 среде ардуино есть метод long toInt() у String.

  11. :oops: Каюсь, проглядел. Вот знал же, что оно там должно быть! Полез вместо справочника правду искать прямо в исходники и самое главное пропустил.

  12. вопрос был как String перевести в char а отвечают все на вопрос как char перевести в int

  13. String str = «abs»;
    uint8_t ln = str.length();
    uint8_t input[ln] ;
    for(uint8_t i = 0; i < ln; i++ ){
        input[i] = str.charAt(i);
    }

    Как-то так…

  14. ошибся как string перевести в int
    если string это число скажем 140815

  15. Спасибо за тренировку.

    String str = «140815»;
    int digits = str.toInt();
  16. А в int поместится 140815? ))

  17. long — если Вам мало int
    хотя https://toster.ru/q/79764 это может что прояснит

  18. Наш int 2 байта. 4 это у DUE и далее.

Страница 1 из 2

Понравилась статья? Поделить с друзьями:
  • Ошибка перевода сбербанк через 900
  • Ошибка перевода сбербанк онлайн скриншот
  • Ошибка перевода сбербанк онлайн как вернуть
  • Ошибка перевода сбербанк на киви
  • Ошибка перевода сбербанк как вернуть деньги