2016-10-25 57 views
1

我在我的頭文件中打印了一個字符串,其中有一些數字值,其中一些有小數點,另一些沒有。我想要做的是打印帶有小數的值(如果存在)並添加前面的「$」;否則,只打印值,但考慮小數部分」 .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尋找的是:

$2,112.34 
99 
20 
$456.12 
+0

嘗試使用正則表達式,http://regexr.com/3eh0c,請參閱替換部分。 – BladeMight

回答

2

您可以通過查找是否有餘數除以1:

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

所以,你最終的代碼可能是這樣的:

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

更新:鑑於這可能不是浮點數或其他文化很好地工作,如指出,評論,使用% 1 < epsilon可能更安全,其中epsilon是一些小數字(因爲這看起來是貨幣,代表非物質數量的東西,如0.0000005,應該照顧floati NG點問題):

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 
    } 
} 
相關問題