Преобразование строки в плавающую в 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");

4
Пожалуйста, опишите, почему это правильный ответ.
Bas Peeters


4

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


Я устал дабл.Parse возвращает 4100027357629127.0, это очень плохо
Мехмет

2
Это похоже на "." символ не является десятичным разделителем в вашем регионе? Проверьте stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe

0

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


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

-2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.