gpt4 book ai didi

c# - Double.TryParse() 忽略 NumberFormatInfo.NumberGroupSizes?

转载 作者:太空狗 更新时间:2023-10-29 20:28:35 27 4
gpt4 key购买 nike

我想知道我是否遗漏了什么......我在标准的大不列颠文化下运行。

Double result = 0;
if (Double.TryParse("1,2,3", NumberStyles.Any, CultureInfo.CurrentCulture, out result))
{
Console.WriteLine(result);
}

预期的输出是什么...“1,2,3”不应解析为 double 。然而它确实如此。根据 .NET 2.0 MSDN documentation

AllowThousands Indicates that the numeric string can have group separators; for example, separating the hundreds from the thousands. Valid group separator characters are determined by the NumberGroupSeparator and CurrencyGroupSeparator properties of NumberFormatInfo and the number of digits in each group is determined by the NumberGroupSizes and CurrencyGroupSizes properties of NumberFormatInfo.

Allow thousands 包含在 NumberStyles.Any 中。 NumberGroupSizes 对于我的文化是 3。这只是 Double.Parse 中的一个错误吗?似乎不太可能,但我无法发现我做错了什么....

最佳答案

这只是意味着输入字符串可以包含零个或多个 NumberFormatInfo.NumberGroupSeparator 实例。此分隔符可用于分隔任意大小的数字组;不只是成千上万。 NumberFormatInfo.NumberGroupSeparatorNumberFormatInfo.NumberGroupSizes 用于将小数格式化为字符串。使用 Reflector 似乎 NumberGroupSeparator 仅用于确定字符是否为分隔符,如果是,则跳过。 NumberGroupSizes 根本没有使用。

如果要验证字符串,可以使用 RegEx 或编写一个方法来验证字符串。这是我刚刚一起破解的:

string number = "102,000,000.80";
var parts = number.Split(',');
for (int i = 0; i < parts.Length; i++)
{
var len = parts[i].Length;
if ((len != 3) && (i == parts.Length - 1) && (parts[i].IndexOf('.') != 3))
{
Console.WriteLine("error");
}
else
{
Console.WriteLine(parts[i]);
}
}

// Respecting Culture
static Boolean CheckThousands(String value)
{
String[] parts = value.Split(new string[] { CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator }, StringSplitOptions.None);
foreach (String part in parts)
{
int length = part.Length;
if (CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes.Contains(length) == false)
{
return false;
}
}

return true;
}

关于c# - Double.TryParse() 忽略 NumberFormatInfo.NumberGroupSizes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com