我在我的标题中打印一个带有数字值的字符串,其中一些有小数,有些则没有。我想要做的是打印带小数的值(如果存在)并添加前面的“$”;否则,只需打印该值,但取小数部分“.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
我正在寻找的输出是:
$2,112.34
99
20
$456.12
答案 0 :(得分:2)
您可以通过查找除以1之后是否有余数来检测小数是否为整数:
99 % 1 == 0 // true
456.12 % 1 == 0 // false
所以,你的最终代码可能如下:
valueDateDay.ToString(valueDateDay % 1 == 0 ? "N0" : "C2");
更新:鉴于这可能不适用于浮点数或其他文化,正如评论中所指出的,使用% 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 :(得分: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
}
}