C# 检测字符串是否有小数点

C# 检测字符串是否有小数点,c#,string,C#,String,我在标题中打印了一个字符串,其中有数字值,有些有小数,有些没有小数。我想做的是打印带有小数点的值(如果存在),并在前面添加一个“$”;否则,只需打印值,但取小数部分“.00” 这是我的代码: var listDay = data.Where(c => c.Fecha >= actualDate && c.Fecha <= actualDateMax).ToList(); var haveDataDay = listDay.Count() > 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>
我想要的结果是:

$2,112.34
99
20
$456.12

通过查找除以1后是否有余数,可以检测十进制数是否为整数:

99 % 1 == 0 // true
456.12 % 1 == 0 // false
因此,您的最终代码可能如下所示:

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

更新:正如评论中所指出的,鉴于这可能不适用于浮点数或其他区域性,使用
%1
可能更安全,其中
epsilon
是一些小数字(因为这似乎是货币,代表非实质性金额的东西,如
0.0000005
,应该考虑浮点问题):

valueDateDay.ToString(valueDateDay%1<0.0000005?“N0”:“C2”);
如果您的应用程序是国际化的,但您希望使用明确的货币格式,那么也很容易替换,可能类似于:

string.Format(valueDateDay % 1 < 0.0000005 ? "{0:N0}" : "${0:#,0.00}", valueDateDay);
string.Format(valueDateDay%1<0.0000005?{0:N0}):“${0:#,0.00}”,valueDateDay);
尝试使用正则表达式,请参阅“替换”部分。
valueDateDay.ToString(valueDateDay % 1 < 0.0000005 ? "N0" : "C2");
string.Format(valueDateDay % 1 < 0.0000005 ? "{0:N0}" : "${0:#,0.00}", valueDateDay);
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
    }
}