- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道我是否遗漏了什么......我在标准的大不列颠文化下运行。
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.NumberGroupSeparator
和 NumberFormatInfo.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/
这应该非常简单明了,但由于某些原因它行不通。 var myNumber = "100255.123"; var numberFormatInfo = new NumberFormatInfo {Cur
我想读取一个字符串,从该字符串中获取一个特定的数字,将其乘以一个 double ,然后用新的字符串数字替换旧的。相乘后数字的格式发生变化 例子:原始格式8.08000e+14 乘以,比方说二,返回:1
我正在尝试打印 Point3D 列表。但是我不希望它们以最大小数位数打印。我希望能够控制它。 所以我试过了 Point3D loc = new Point3D(x,y,z); var formatte
我正在尝试使用点作为分隔符和两位小数来获取 double 值的字符串解释,但是: double d = 8.78595469; Console.WriteLine(d.ToString("F"));
NumberFormatInfo类包括几个与货币相关的属性,例如货币符号。这意味着可以使用标准格式字符串轻松地将对象格式化和显示为货币。也支持解析。 我的问题是,为什么开箱即用支持货币而不支持其他计量
我们目前正在使用以下内容在我们的网络应用程序中创建美元值(value): string.Format("{0:C0}", dollarValue ); 在这个例子中,如果 dollarValue 是
我有一个 ASP.NET Gridview,其 BoundField 绑定(bind)到十进制值。我使用以下代码将十进制数格式化为货币值: DataFormatString="{0:C}" 我们有一个
我将流程中的数据输出到 csv。我将中间结果存储在数据类中,该数据类还具有将数据输出到字符串的方法,以便将其写入文件。 Class DataClass { // the actual data
我创建了一些用于 Razor 内容渲染的特定格式扩展: public static class FormatExtension { private static CultureInfo Bel
我使用 new CultureInfo("fr-FR") 创建了一个 CultureInfo 对象。现在我有一个号码,我想调用 .ToString("C", FrenchCultureInfo)。生成
我想知道我是否遗漏了什么......我在标准的大不列颠文化下运行。 Double result = 0; if (Double.TryParse("1,2,3", NumberStyles.Any,
我正在重构一些单元测试,发现一些解析策略依赖于 DateTime.TryParseExact 和 sbyte.TryPase,它们本身依赖于 NumberFormatInfo.CurrentInfo
我需要在我的 ASP.NET MVC 应用程序中显示货币,但当货币为 0 时,我希望它显示“免费”(当然是本地化!)而不是 $0.00。 所以当我遇到这样的事情时...... Decimal pric
NumberFormatInfo nfi = new NumberFormatInfo() { CurrencySymbol = "$$s. ", CurrencyGroupSepar
我是一名优秀的程序员,十分优秀!