Csharp/C#教程:Double.TryParse()忽略NumberFormatInfo.NumberGroupSizes?分享


Double.TryParse()忽略NumberFormatInfo.NumberGroupSizes?

我想知道我是否遗漏了某些东西……我正在按照标准的英国文化运作。

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

预期的产出将毫无意义……“1,2,3”不应该解析为双倍。 不过确实如此。 根据.NET 2.0 MSDN文档

AllowThousands表示数字字符串可以有组分隔符; 例如,将数百个与数千个分开。 有效的组分隔符由NumberFormatInfo的NumberGroupSeparator和CurrencyGroupSeparator属性确定,每个组中的位数由NumberFormatInfo的NumberGroupSizes和CurrencyGroupSizes属性确定。

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

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

如果要validation字符串,可以使用RegEx或写入方法来执行此操作。 这是我刚刚攻击的一个:

上述就是C#学习教程:Double.TryParse()忽略NumberFormatInfo.NumberGroupSizes?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020375.html

(0)
上一篇 2022年1月5日
下一篇 2022年1月5日

精彩推荐