Преобразование строки в плавающую в C #

108

Я конвертирую строку типа «41.00027357629127» и использую;

Convert.ToSingle("41.00027357629127");

или

float.Parse("41.00027357629127");

Эти методы возвращают 4.10002732E + 15 .

Когда я конвертирую в float, я хочу «41.00027357629127». Эта строка должна быть такой же ...

Мехмет
источник
1
Как узнать, во что оно преобразовано - вот как вы отображаете число
мммммм
1
Есть идеи, почему это ToSingle? А не ToFloat?
Лорд Дарт Вейдер,
41.00027357629127 не должно быть 4.10002732E + 15 в экспоненциальной нотации, если, конечно, в вашей культуре не используется десятичная запятая вместо десятичной точки (и точка в качестве разделителя тысяч), поэтому число фактически будет выглядеть так: 4100027357629127, следовательно, будет отображаться как 4.10002732E + 15
ljgww

Ответы:

230

Установлен языковой стандарт вашего потока, в котором десятичный знак - «,» вместо «.».

Попробуйте использовать это:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

Обратите внимание, однако, что число с плавающей точкой не может содержать такое количество цифр точности. Для этого вам нужно будет использовать double или Decimal.

Мэтью Уотсон
источник
35
не забудьте добавить пространство имен using System.Globalization;для доступаCultureInfo
Mobiletainment
24

Во- первых, это просто представление о floatномер , который вы видите в отладчике. Реальное значение приблизительно точно (насколько это возможно).

Примечание. Всегда используйте информацию CultureInfo при работе с числами с плавающей запятой вместо строк.

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

Это всего лишь пример; выберите подходящую культуру для вашего случая.

Тигран
источник
как я могу выбрать свой CultureInfo? Я в турции, где я добавлю TR-TR?
Mehmet
1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow
20

Вы можете использовать следующее:

float asd = (float) Convert.ToDouble("41.00027357629127");
user4292249
источник
4
Пожалуйста, опишите, почему это правильный ответ.
Bas Peeters
7

Использовать Convert.ToDouble("41.00027357629127");

Convert.ToDouble документация

Озгур Догус
источник
2
Разве это не меняет тип данных с float на double? ОП хотел поплавать.
Нелл Мартинес
4

Точность числа с плавающей запятой составляет 7 цифр. Если вы хотите сохранить всю партию, вам нужно использовать двойной тип, который содержит 15-16 цифр. Что касается форматирования, посмотрите сообщение о двойниках форматирования . И вам нужно побеспокоиться о десятичных разделителях в C # .

JPE
источник
Я устал дабл.Parse возвращает 4100027357629127.0, это очень плохо
Мехмет
2
Это похоже на "." символ не является десятичным разделителем в вашем регионе? Проверьте stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe
0

Ты можешь double.Parse("41.00027357629127");

ABH
источник
Я не думаю, что он спрашивает, как это исправить.
OR Mapper
-2

Вы можете использовать синтаксический анализ с double вместо float, чтобы получить более точное значение.

Ученик
источник