2010-02-01 3 views
7

Есть ли способ (в .NET) удаления конечные нули из числа при использовании .ToString("..."), но для отображения до 2 знаков после запятой, если число не является целым числом:Отображение конечных нулей, за исключением, когда целое число

  1. (12345,00) .ToString (...) должны отображаться как 12345
  2. (12345,10) .ToString (...) должен отображаться как 12345.10
  3. (12345.12) .ToString (...) должен отображаться как 12345.12

Is есть 1 строка формата формата, которая будет работать во всех этих сценариях?

.ToString("#.##") почти работает, но не показывает концевую 0 для сценария 2 ...

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

+0

Попробуйте '0. # 0'?Я не пробовал это, и я не уверен, как он будет реагировать во всей ситуации с цифрами. –

+0

Для этого нет ни одного формата. Кроме того, что вы хотите отобразить 12345.001? 12345.00 (округляется до 2 десятичных знаков, потому что это не целое число) или 12345 (число, округленное до 2 десятичных знаков, является целым числом, поэтому удалите конечные нули)? – Joe

+0

Для целых чисел это отображает как 12345.00 –

ответ

7

Что-то в этом роде?

  if (number % 1 == 0) 
       Console.WriteLine(string.Format("{0:0}", number)); 
      else 
       Console.WriteLine(string.Format("{0:0.00}", number)); 

EDIT

Существует небольшая ошибка в этом коде, хотя :) 1,001 будет печататься в «1,00» ... это не может быть то, что вы хотите, если вам нужно распечатать 1.001 в качестве " 1 "вам нужно будет изменить тест if (...), чтобы проверить конечный допуск. Поскольку этот вопрос больше связан с форматированием, я оставлю ответ без изменений, но в производственном коде вы можете рассмотреть этот вид проблемы.

+0

Для немного более читаемого кода я бы предпочел 'String format = (number% 1) == 0? "{0: 0}": "{0: 0.00}"; ' –

+0

Да, я действительно пошел с этой инициализацией, но я подумал, что« длинный путь »был яснее в контексте ответа на вопрос. Я бы, вероятно, использовал ваш стиль в реальном коде. –

+0

Это не совсем то, что я искал, поскольку я хотел связать непосредственно с номером на странице asp.net и использовать строку формата, чтобы определить, как она отображается. Однако я использовал этот подход для добавления другой переменной в мои привязки и вместо этого привязываюсь к ней (как к строке). –

0

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

string output = (value % 1 > 0) ? String.Format("{0:0.00}", value) : String.Format("{0:0.##}", value); 
1

Не в одном формате, но она вписывается в одну строчку:

double a = 1.0; 
string format = string.Format((a == (int)a) ? "{0:0}" : "{0:0.00}", a); 
0

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

public static class Extensions 
{ 
    public static string ToCustomString(this decimal d) 
    { 
     int i = (int)d; 
     if (i == d) 
      return i.ToString(); 

     return d.ToString("#.00"); 
    } 
} 
0

Если вы хотите использовать его для отображения валюты, вы можете использовать следующие

float fVal = 1234.20f; 
String strVal = fVal.Tostring("c"); 
0

Вы могли бы написать метод расширения, как это сделать форматирование для вас:

public static string FormatNumberString(this double input) 
    { 
     int temp; 
     string inputString = input.ToString(); 
     return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00"); 
    } 
0

Если вы хотите сделать это в ASP MVC Razor, тогда вы можете попробовать это

@string.Format(item.DecimalNumber % 1 == 0 ? "{0:0}" : "{0:0.00}", item.DecimalNumber) 

Это будет вести себя так, как:

Значение: 2,5 -> Дисплей: 2,50

Значение: 5 -> Дисплей: 5

Значение: 2,45 -> Дисплей: 2,45

2

Грязный путь:

string.Format("{0:0.00}", number).Replace(".00","") 
+0

Этот подход возвращает 110 для 11.0 – DoIt

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