Преобразование строки для плавания в С#

Я преобразовываю строку как "41.00027357629127", и я использую;

Convert.ToSingle("41.00027357629127");

или

float.Parse("41.00027357629127");

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

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

Ответ 1

Ваш языковой стандарт по умолчанию установлен в значение, в котором десятичная метка "," вместо ".".

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

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

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

Ответ 2

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

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

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

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

Ответ 4

Вы можете использовать "float asd = (float) Convert.ToDouble("41.00027357629127");.

Ответ 6

Вы можете double.Parse("41.00027357629127");

Ответ 7

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