Visual Studio NET框架6.0上的.TryParse(字符串、数字样式、IFormatProvider、Int32)

oalqel3c  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(132)

在Visual Studio中使用.NET framework6的项目中,如果可能的话,我需要将用户字符串转换为int。
TryParse是最有效的,因为它不会抛出异常,而是在无法转换时返回false。
但是我遇到了一个问题。int.TryParse方法在小数点为0的值上返回false,如22.0、24.00
我在https://learn.microsoft.com/tr-tr/dotnet/api/system.int32.tryparse?view=net-7.0上发现了int.TryParse(int.TryParse(字符串、数字样式、IFormatProvider、Int32)重载
我使用的是.NET框架6.0

string numberString = "5.0";
bool valid = int.TryParse(numberString,NumberStyles.AllowDecimalPoint,CultureInfo.CurrentCulture, out int result);

在这个代码中valid为False。在我提供的链接中,.NET framework 6.0没有列在函数的versions部分下。这就是valid为False的原因吗?我是不是漏掉了什么?
这是没有意义的。为什么我需要写自己的函数来检查一个数字是否有0作为十进制数呢?有没有其他方法可以在.NET framework6上实现这一点?
综上所述,如何在c# .NET framwork 6中检查字符串是否有int数值,包括0个十进制数字值如22.0为True

dgiusagp

dgiusagp1#

您的代码是正确的,但我怀疑您当前的区域性使用句点(.)以外的其他字符作为小数点分隔符。根据您到MSDN的链接,您可能在土耳其,在这种情况下,小数点分隔符是逗号(,)。
下面的例子应该可以帮助您找出在您的用例中最好做什么。

// Build the number string using the current culture decimal separator
var decimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
string numberString = $"5{decimalSeparator}0";
bool valid = int.TryParse(numberString, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out int result);
// Use a culture that uses a period as a decimal separator
string numberString = "5.0";
bool valid = int.TryParse(numberString, NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("en-GB"), out int result);
// Current culture must use a comma as a decimal separator
string numberString = "5,0";
bool valid = int.TryParse(numberString, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out int result);

相关问题