gpt4 book ai didi

c# - 如何使用 Convert.ChangeType 将字符串转换为带组分隔符的数字?

转载 作者:行者123 更新时间:2023-11-30 22:46:59 25 4
gpt4 key购买 nike

我想制作一个通用的字符串到数字转换器,并将其作为字符串扩展提供,因此我编写了以下代码:

public static bool TryParse<T>( this string text, out T result, IFormatProvider formatProvider ) where T : struct
try
{
result = (T)Convert.ChangeType( text, typeof( T ), formatProvider );
return true;
}
catch(...

我这样调用它:

int value;
var ok = "123".TryParse(out value, NumberFormatInfo.CurrentInfo)

它工作正常,直到我想使用组分隔符:因为我住在法国,千位分隔符是空格,小数点分隔符是逗号,所以字符串“1 234 567,89”应该等于 1234567.89(在不变文化中)。但是,函数崩溃了!

当尝试执行非通用转换时,例如 double.Parse(...),我可以使用接受 NumberStyles 参数的重载。我指定了 NumberStyles.Number,这次成功了!

所以,问题是:

  • 为什么解析不遵循我的 NumberFormatInfo(其中 NumberGroupSeparator 被很好地指定为一个空格,正如我在我的操作系统中指定的那样)
  • 我如何使用 Convert.ChangeTime 使通用版本工作,因为它没有接受 NumberStyles 参数的重载?

最佳答案

尝试明确指定文化“fr-FR”:

CultureInfo c = new CultureInfo("fr-FR");
double d = 0;
if ("1 234 567,89".TryParse<double>(out d, c)) {
Console.WriteLine(d);
}

编辑:这个例子正常工作:

static class Extension {
public static bool TryParse<T>(this string text, out T result, IFormatProvider formatProvider) where T : struct {
result = default(T);
try {
result = (T)Convert.ChangeType(text, typeof(T), formatProvider);
return true;
} catch {
return false;
}
}

}

class Program {
static void Main(string[] args) {
CultureInfo c = new CultureInfo("fr-FR");
double d = 0;
// NumberGroupSeparator in fr-FR culture is space
bool res = "123 456,78".TryParse<double>(out d, c);
// Set separator as '.' and parse string with dots
c.NumberFormat.NumberGroupSeparator = ".";
res = "123.456,78".TryParse<double>(out d, c);
}
}

Est-ce que ca marche comme ca? :)

关于c# - 如何使用 Convert.ChangeType 将字符串转换为带组分隔符的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2400795/

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