Почему нам не нужен суффикс после преобразования, а во время объявления он нам нужен? - PullRequest
0 голосов
/ 09 июня 2019

Float не принимает суффикс f при преобразовании строки в float с использованием C #.Я хочу преобразовать строку в число с плавающей точкой, и моя строка уже содержит суффикс "F".но float не принимает суффикс f при преобразовании из строки в float и выдает исключение.

static void Main()
{
    string any_str = "123.45F";
    float f = float.Parse(any_str);       
    Console.WriteLine(f);
    Console.ReadLine();
}

Ответы [ 4 ]

4 голосов
/ 09 июня 2019

В основном float.Parse ничего не может сделать с этим суффиксом f.float.Parse просто примет строку, представляющую числовое значение, любые дополнительные нечисловые символы будут вызывать исключение.Суффикс f предназначен только для использования вами в вашем коде.Так что fahime и Norse сказали, что вам нужно избавиться от этого 'f' перед использованием float.Parse.

1 голос
/ 09 июня 2019

Почему нам не нужен суффикс после преобразования, но во время объявления он нам нужен?

По умолчанию и в спецификациях C # каждое число имеет floating point и будет рассматриваться как Double переменная, поэтому вам нужно использовать суффикс F для создания литерала для этого типа.

// 3.14 is considered a double variable by the compiler so it gives you an error
float myFloat = 3.14; 

Вы можете спросить, почему двойная переменная со значением 3.14 не может быть назначена или приведена к переменной с плавающей точкой?

http://net -informations.com / q / faq / float.html

Типы переменных Decimal, Double и Float различаются втак, что они хранят значения.Точность является основным отличием, когда float - это тип данных с плавающей запятой с одинарной точностью (32 бита), double - это тип данных с плавающей запятой двойной точности (64 бита), а decimal - это тип данных с плавающей запятой 128-бит.

Float - 32 бита (7 цифр) Double - 64 бита (15-16 цифр) Основное различие заключается в том, что Float и Double являются двоичными типами с плавающей запятой, а десятичное число будет хранить значение как тип с плавающей запятой.Таким образом, десятичные дроби имеют гораздо более высокую точность и обычно используются в денежных (финансовых) приложениях, которые требуют высокой степени точности.Но с точки зрения производительности, десятичные числа медленнее, чем double и типы с плавающей запятой.

Вы также можете прочитать этот ответ.

И о Parse метод:

float.Parse требуется только допустимая строка, что означает, что только строка включает в себя [0-9], знак и десятичную точку (зависит от культуры, например, [,/.]).

Так что вам нужно всего лишь избавиться от недопустимых символов в ваших строках, а затем проанализировать их.

1 голос
/ 09 июня 2019

Я не думаю, что float.Parse имеет какую-либо встроенную функциональность для этого, но вы можете создать метод расширения для собственного удобства.

public static float ToFloat(this string value)
{
    return float.Parse(value.TrimEnd('f', 'F'));
}

Используйте как таковое:

any_str.ToFloat();

РЕДАКТИРОВАТЬ: Некоторые могут предложить вам использовать Regex, чтобы убрать любые буквы или символы, но это не очень производительно;используйте его только тогда, когда вы знаете, что в конце у вас будут другие символы, кроме f или F.

0 голосов
/ 09 июня 2019

Вам необходимо удалить все буквы алфавита в вашем вводе:

public static void Main()
{
    string any_str = "123.45F";
    string numberOnly = Regex.Replace(any_str, "[^0-9.]", "");
    float f = float.Parse(numberOnly);       
    Console.WriteLine(f);
    Console.ReadLine();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...