检测字符串是否有小数

时间:2016-10-25 23:58:04

标签: c# string

我在我的标题中打印一个带有数字值的字符串,其中一些有小数,有些则没有。我想要做的是打印带小数的值(如果存在)并添加前面的“$”;否则,只需打印该值,但取小数部分“.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

2 个答案:

答案 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
    }
}