2011-02-01 3 views
16

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

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

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

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

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

+0

сколько цифр после запятой?если вы хотите сохранить эту динамику, считая, что значение правильное float, используйте .ToString («G») –

+0

Цифры будут меняться, чтобы это было просто, я бы сказал, что диапазон цифр после десятичной точки может быть где угодно между 1 и 5. – kingrichard2005

+0

.ToString («G») лучше всего подходит для диапазона переменных –

ответ

24

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

Таким образом, вы определенно можете это сделать:

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

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

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

+2

Быстрое примечание: в научных областях принято различать «1.01e5» и «1.0100e5», так как число конечных нулей способствует количеству значимых цифр, которые выражают точность измерения. –

4

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

+6

Ха-ха, «немного напоминает» -nice one;) –

38

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

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

Помещенными так много нуля по мере необходимости, в конце формата.

+0

Привет, Aliostad, проблема с этим, я хочу, чтобы строка была отформатирована точно по мере форматирования числа. Для вашего второго примера я хотел бы, чтобы это было «12345.0» в виде строки, а не «12345.0000». – kingrichard2005

+0

@ kingrichard2005- какая информация говорит вам, является ли поплавок 12345.0 или 12345.0000? Они были бы эквивалентны поплавкам. –

+0

Я читаю эти файлы из txt-файла. Возможно, лучшим вариантом было бы определить, является ли число, считанное в виде строки, десятичным числом или нет. – kingrichard2005

13

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

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

Если вы хотите увидеть больше модификаторов, посмотрите на MSDN - Standard Numeric Format Strings

Смежные вопросы