尝试将十进制数解析为Int时,TryParse无法正常工作

DFo*_*ord 5 c# int c#-4.0

我试图解析可能有小数的字符串.我正在使用,Int32.TryParse但它似乎没有工作.

这是我尝试解析的函数:

private NumberStyles styles = NumberStyles.Number;
private CultureInfo culture = CultureInfo.CurrentCulture;
public int? ParseInt(string node)
{
    int number;
    if (Int32.TryParse(node, styles, culture.NumberFormat, out number))
    {
        return number;
    }
    return null;
 }
Run Code Online (Sandbox Code Playgroud)

这是我的单元测试失败了

[Fact]
public void TestParseIntWithDecimal()
{
    string provided = "28.789";
    int expected = 28;

    int? actual = _parser.ParseInt(provided);

    Assert.NotNull(actual);
    Assert.Equal(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的单元测试时,null返回ParseInt并且我不明白为什么.我以为TryParse可以将十进制数解析为整数.

Tim*_*ter 10

Parse/ TryParse方法是非常严格的.他们不接受任何其他类型,而不是您用作目标的类型.28.789显然不是int这样,它失败了.如果要截断小数部分,仍然需要decimal先将其解析.然后你可以使用(int)Math.Floor(num).

private NumberStyles styles = NumberStyles.Number;
private CultureInfo culture = CultureInfo.CurrentCulture;
public int? ParseInt(string node)
{
    decimal number;
    if (decimal.TryParse(node, styles, culture.NumberFormat, out number))
    {
        return (int) Math.Floor(number); // truncate decimal part as desired
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)