2016-10-25 3 views
1

Я печатаю в своем заголовке строку с числовыми значениями, некоторые из них имеют десятичные числа, а некоторые из них - нет. Я хочу сделать это, чтобы напечатать значение с десятичной точкой, если оно существует, и добавить предыдущий «$»; в противном случае просто напечатать значение, но принимая дробную часть»+0,00"Обнаруживать, если строка имеет десятичное значение

Это мой код:

var listDay = data.Where(c => c.Fecha >= actualDate && c.Fecha <= actualDateMax).ToList(); 
var haveDataDay = listDay.Count() > 0; 

    <h4 class="semi-bold"> 
     @if (haveDataDay) 
     { @valueDateDay.ToString("F2") } 
     else 
     { @this.FP("lbl.loader.nodata") } 
    </h4> 

Некоторые значения у меня есть:

2112.34 
99.00 
20.00 
456.12 

и выход I 'm looking for is:

$2,112.34 
99 
20 
$456.12 
+0

Попробуйте использовать regex, http://regexr.com/3eh0c, см. Раздел замены. – BladeMight

ответ

2

Вы можете определить, является ли десятичное число целым, если найти остаток после деления на 1:

99 % 1 == 0 // true 
456.12 % 1 == 0 // false 

Итак, ваш окончательный код может выглядеть следующим образом:

valueDateDay.ToString(valueDateDay % 1 == 0 ? "N0" : "C2"); 

Update: Учитывая, что это не может работать хорошо для чисел с плавающей точкой или других культур, как указано в комментарии, может быть безопаснее использовать % 1 < epsilon, где epsilon - это небольшое количество (так как это выглядит как валюта, то, что представляет собой нематериальную сумму, например 0.0000005, которая должна заботиться о плавающих вопросы точки нг):

valueDateDay.ToString(valueDateDay % 1 < 0.0000005 ? "N0" : "C2"); 

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

string.Format(valueDateDay % 1 < 0.0000005 ? "{0:N0}" : "${0:#,0.00}", valueDateDay); 
1
string FormatNumber(string s) 
{ 
    decimal d; 
    if (!decimal.TryParse(s, out d)) return null; 
    if (d % 1 == 0) 
    { 
     return d.ToString("F0"); //Will format as fixed with zero decimals 
    } 
    else 
    { 
     return d.ToString("C2"); //Will format with currency symbol and two decimals 
    } 
} 
Смежные вопросы