Спецификатор формата с плавающей точкой в ​​строку - PullRequest
21 голосов
/ 01 февраля 2011

У меня есть некоторые значения с плавающей точкой, которые я хочу преобразовать в строку, при преобразовании я хочу сохранить одинаковое форматирование, т. Е. 999.0000 (с плавающей точкой) -> 999.0000 (строка). Моя проблема в том, что значения содержат произвольное количество нулей после десятичной запятой, как в предыдущем примере, они удаляются при преобразовании в строку, поэтому результат, который я на самом деле получаю, равен 999.

Я посмотрел на спецификаторы формата для метода toString() на MSDN , спецификатор RoundTrip ('R') выглядит так, как будто он выдаст то, что я хочу, но поддерживается только для Single, Double и переменные BigInt. Есть ли спецификатор формата для переменных типа float? Или было бы проще просто преобразовать значения в двойные?

ОБНОВЛЕНИЕ: просто для ясности, причина, по которой я хочу сохранить конечные нули, заключается в том, что я делаю сравнение десятичных разрядов, т.е. я сравниваю количество цифр после десятичного разряда между двумя значениями. Так, например, 1.00 и 1.00000 имеют разное количество цифр после десятичной точки. Я знаю, что это странная просьба, она для работы, и требование исходит сверху.

ОБНОВЛЕНИЕ 2-3-11:

Я слишком много думал об этом, я читаю числа из txt-файла и затем анализирую их как числа с плавающей точкой. Я собираюсь изменить программу, чтобы проверить, являются ли строковые значения десятичными или целыми числами. Извините, что потратил ваше время, хотя это было очень проницательно.

Ответы [ 4 ]

50 голосов
/ 01 февраля 2011

Используйте ToString() с этим форматом:

12345.678901.ToString("0.0000"); // outputs 12345.6789
12345.0.ToString("0.0000"); // outputs 12345.0000

Поставьте столько нулей, сколько необходимо в конце формата.

26 голосов
/ 01 февраля 2011

Во-первых, как говорит Этьен , float в C # равно Single. Это просто ключевое слово C # для этого типа данных.

Так что вы определенно можете сделать это:

float f = 13.5f;
string s = f.ToString("R");

Во-вторых, вы пару раз ссылались на «формат» числа; числа не имеют форматов, они имеют только значения . Строки имеют форматы. Что заставляет меня задуматься: что это за вещь, которая у вас есть, которая имеет формат, но не является строкой? Самое близкое, что я могу придумать, это decimal, который поддерживает свою точность; однако, просто позвонив по номеру decimal.ToString, вы получите желаемый эффект в этом случае.

Как насчет включения примера кода, чтобы мы могли точно видеть, что вы делаете, и почему он не достигает того, чего вы хотите?

14 голосов
/ 17 мая 2012

Вы можете передать строку формата в метод ToString, например, так:

ToString("N4"); // 4 decimal points Number

Если вы хотите увидеть больше модификаторов, взгляните на MSDN - Стандартные строки числового формата

4 голосов
/ 01 февраля 2011

В C # float - псевдоним для System.Single (немного похоже на int - псевдоним для System.Int32).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...