2009-12-14 3 views
2

Я пытаюсь форматировать десятичную так, что он будет получать отображается так:C# Decimal Форматирование запросов

14,5 должны получить отображается как «14,50» 14,50 должны получить отображаться как «14,50» 14,05 должны получить отображается «14.05» 14.00 должно отображаться как «14»

Возможно ли с помощью одного формата строки, т. Е. Не использовать условное форматирование?

Я пробовал «0. ##» (не удовлетворяет первому примеру) и «0.00» (не удовлетворяет последнему примеру).

Спасибо.

ответ

4

Да. Вы можете использовать спецификатор формата «G». Для образцов см. Документацию String.Format.

Например:

decimal value = 14.05m; 
string result = String.Format("{0:G}", value); // "14.05" 

value = 14m; 
result = String.Format("{0:G}", value); // "14" 
+0

да, но 14,5 будет по-прежнему отображаться как 14,5 –

+0

Ницца, узнать что-то новое все время. – GrayWizardx

+0

ммм - да, правда. Не уверен, почему 14.5 не должно составлять 14,5, если 14.00 составляет 14 .... Это можно было бы противно обрабатывать без какой-либо дополнительной логики. –

0

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

Если вы согласитесь на 14.5 вместо 14.50, тогда вы будете в порядке с синтаксисом 0. ##, но я не могу придумать, как это сделать.

0

ответ Следуйте Рид и добавить проверку после того, что:

resultArray = result.Split('.'); 

if (resultArray.Length > 1 && resultArray[1].Length != 2) 
    result = String.Format("{0.00}", value); 

Не совсем элегантно, но получите вам результат вы хотите.

Это считается, что лицо, заявившее, что оно не относится к 14.5, является правильным в комментариях.

1

Вы могли бы использовать что-то вроде: FormatNumber (VariableToBeFormatted, 2) .Привернуть (». 00" , String.Empty)

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