C#

System.InvalidCastException: "Unable to cast object of type 'System.String[]' to type 'System.IConvertible'."

как исправить эту ошибку? вот код
using System;
namespace Bank
{
class Program
{
public static string userInput;
public static void Main()
{
userInput = Console.ReadLine();
Console.WriteLine(Calculate());

}
public static double Calculate()
{
Convert.ToDouble(userInput.Split()); // тут ошибка
double sum = userInput[0];
double rate = userInput[1];
double hek = userInput[2];
double dohod = (sum / 100 * rate) / 12 * hek;
return dohod + sum;
}
}
} если убрать конвертирование то программа работает, но не так как надо. Данные, что ввёл пользователь в sum, rate и hek тупо не записываются. Вместо нужных значений там мусор, в sum = 49, в rate = 53, а в hek = 48. Я хз откуда эти числа взялись вообще. Смысл кода в том, чтобы рассчитать процент вклада и конечную его сумму
Ошибка System.InvalidCastException: "Unable to cast object of type 'System.String[]' to type 'System.IConvertible'." возникает из-за того, что метод Convert.ToDouble() не может преобразовать массив строк в массив чисел. Чтобы исправить это, вы можете использовать метод Array.ConvertAll() для преобразования массива строк в массив чисел. Метод Array.ConvertAll() принимает два аргумента: первый аргумент - это массив строк, который вы хотите преобразовать, а второй аргумент - это функция, которая будет использоваться для преобразования каждой строки в число. В вашем случае функция для преобразования строки в число будет просто функцией Double.Parse().

Вот исправленный код:
 using System; 

namespace Bank
{
class Program
{
public static string userInput;

public static void Main()
{
userInput = Console.ReadLine();
Console.WriteLine(Calculate());
}

public static double Calculate()
{
double[] numbers = Array.ConvertAll(userInput.Split(), Double.Parse);
double sum = numbers[0];
double rate = numbers[1];
double hek = numbers[2];
double dohod = (sum / 100 * rate) / 12 * hek;
return dohod + sum;
}
}
}
Этот код будет работать правильно, и он будет возвращать конечную сумму вклада после учета процентов и срока вклада.
Николай Корнилов
Николай Корнилов
771
Лучший ответ
Николай Мордвинкин Пальчики не устают так быстро печатать?
Ошибка System.InvalidCastException: "Unable to cast object of type 'System.String[]' to type 'System.IConvertible'." возникает, когда вы пытаетесь преобразовать массив строк в число с плавающей запятой. В вашем коде это происходит в строке Convert.ToDouble(userInput.Split());. Метод Split() возвращает массив строк, который вы пытаетесь преобразовать в число с плавающей запятой, что вызывает ошибку.

Чтобы исправить эту ошибку, вы можете изменить код следующим образом:
 public static double Calculate()  
{
string[] inputs = userInput.Split();
double sum = Convert.ToDouble(inputs[0]);
double rate = Convert.ToDouble(inputs[1]);
double hek = Convert.ToDouble(inputs[2]);
double dohod = (sum / 100 * rate) / 12 * hek;
return dohod + sum;
}
В этом коде мы разделяем входные данные пользователя на отдельные строки с помощью метода Split(), а затем преобразуем каждую строку в число с плавающей запятой с помощью метода Convert.ToDouble(). Это позволит избежать ошибки и правильно расчитать результат.
Понятно
Getminet (1) servise arbuz
ЮА
Юдин Андрей
1 363