gpt4 book ai didi

c# - 使 TryParse 与逗号或点小数点分隔符兼容

转载 作者:行者123 更新时间:2023-11-30 12:26:18 25 4
gpt4 key购买 nike

问题:假设您使用的是点“.”。作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。

string str = "2,5";

当你 decimal.TryParse(str, out somevariable); 时会发生什么?

somevariable 将假定为 0。

你能做些什么来解决它?

1-你可以

decimal.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out somevariable);

它会返回 25,而不是 2.5,这是错误的。

2-你可以

decimal.TryParse(str.Replace(",","."), out num);

它会返回正确的值,但是,如果用户使用 "," 作为小数分隔符,它将不起作用。

我无法使其工作的可能解决方案:

在区域设置中获取用户小数点分隔符:

char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

并以某种方式从 ",",sepdec 进行替换,这样,如果它是逗号,它将保留为逗号,如果用户使用点,则替换为实际的点。

提示?

编辑:许多用户发布了有用的信息,最近,在 tryParse 上使用参数 NumberStyles.Any, CultureInfo.GetCultureInfo("pt-PT") 不会如果您的分隔符设置为“,”,则工作,因此它几乎没有满足使 tryparse “通用”的前提。

我会解决这个问题,如果有人有更多提示,欢迎您

最佳答案

我知道这个话题有点老了,但我试着提供一个答案。

我使用正则表达式来确定字符串中使用的数字格式。正则表达式还匹配没有小数点分隔符的数字(“12345”)。

var numberString = "1,234.56"; // en
// var numberString = "1.234,56"; // de
var cultureInfo = CultureInfo.InvariantCulture;
// if the first regex matches, the number string is in us culture
if (Regex.IsMatch(numberString, @"^(:?[\d,]+\.)*\d+$"))
{
cultureInfo = new CultureInfo("en-US");
}
// if the second regex matches, the number string is in de culture
else if (Regex.IsMatch(numberString, @"^(:?[\d.]+,)*\d+$"))
{
cultureInfo = new CultureInfo("de-DE");
}
NumberStyles styles = NumberStyles.Number;
bool isDouble = double.TryParse(numberString, styles, cultureInfo, out number);

HTH

托马斯

关于c# - 使 TryParse 与逗号或点小数点分隔符兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29452263/

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