尝试将十进制数解析为 Int 时 TryParse 不起作用
TryParse not working when trying to parse a decimal number to an Int
我正在尝试解析可能包含小数的字符串。我正在使用 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);
}
当我 运行 我的单元测试时, null
从 ParseInt
返回,我不明白为什么。我以为 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;
}
我正在尝试解析可能包含小数的字符串。我正在使用 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);
}
当我 运行 我的单元测试时, null
从 ParseInt
返回,我不明白为什么。我以为 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;
}