我在标题中打印了一个具有数值的字符串,其中一些有小数点,而另一些则没有。我想要做的是打印带有小数点的值(如果存在)并在前面添加“$”;否则,只打印值但取小数部分“.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>
我的一些值(value)观是:
2112.34
99.00
20.00
456.12
我正在寻找的输出是:
$2,112.34
99
20
$456.12
最佳答案
可以通过判断小数除以1后是否有余数来检测小数是否为整数:
99 % 1 == 0 // true
456.12 % 1 == 0 // false
因此,您的最终代码可能如下所示:
valueDateDay.ToString(valueDateDay % 1 == 0 ? "N0" : "C2");
更新:鉴于这可能不适用于 float 或其他文化,正如评论中所指出的,使用 % 1 < epsilon
可能更安全,其中 epsilon
是一些小数字(因为这似乎成为货币,代表无形数量的东西,比如 0.0000005
,它应该处理 float 问题):
valueDateDay.ToString(valueDateDay % 1 < 0.0000005 ? "N0" : "C2");
如果你的应用程序是国际化的,但你想使用明确的货币格式,那么替换它也很容易,可能是这样的:
string.Format(valueDateDay % 1 < 0.0000005 ? "{0:N0}" : "${0:#,0.00}", valueDateDay);
关于c# - 检测字符串是否有小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40251599/