尝试将十进制数解析为Int时,TryParse不起作用

本文关键字:Int TryParse 不起作用 十进制数 | 更新日期: 2023-09-27 18:09:38

我正在尝试解析可能有小数的字符串。我正在使用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;
 }

这里是失败的单元测试

[Fact]
public void TestParseIntWithDecimal()
{
    string provided = "28.789";
    int expected = 28;
    int? actual = _parser.ParseInt(provided);
    Assert.NotNull(actual);
    Assert.Equal(expected, actual);
}

当我运行单元测试时,nullParseInt返回,我不明白为什么。我以为TryParse可以把十进制数解析成整数

尝试将十进制数解析为Int时,TryParse不起作用

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;
}