Преобразование float в строку и получение точного значения - PullRequest
2 голосов
/ 16 февраля 2010

Это продолжение моего последнего вопроса о преобразовании строки в число с плавающей точкой

У меня есть это значение в переменной с плавающей точкой: 33.9112625 (тридцать три)и мне нужно преобразовать его в строку и получить точное значение, но я не могу это сделать.float.ToString (CultureInfo.InvariantCulture) дает мне «33,91126» в качестве результата.Я пытался .ToString ("G"), "G7" и CultureInfo.InvariantCulture.NumberFormat, но они не помогли.Как я могу преобразовать число с плавающей точкой в ​​строку и получить точно такое же значение?

Ответы [ 3 ]

8 голосов
/ 16 февраля 2010

Во-первых, вы не сохраняете «точные» значения в плавающей точке (System.Single).Подробнее см. статью Дэвида Голдберга о точности с плавающей запятой .

При этом, если вы хотите преобразовать это, вам нужно указать дополнительную точность в Single.ToString ().Используя «G», вы получите точность по умолчанию , которая равна 7. В вашем случае, чтобы увидеть показанное вами значение, вам потребуется 9, поэтому вы можете использовать «G9».

5 голосов
/ 16 февраля 2010

Джон Скит предоставляет статью, объясняющую это , вместе с кодом C # для печати точного представления.

1 голос
/ 16 февраля 2010

Попробуйте изменить его на тип Decimal, я пробовал использовать float, но он показывал бы только 5 десятичных знаков.

decimal d = 33.9112625M;
Console.WriteLine("{0}", d.ToString(System.Globalization.InvariantCulture));

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...