还没有在 SO 上找到类似的问题(关于 '$')。
我正在关注 this example ,试图扩展一个预先存在的方法来将字符串转换为 double 。代码的一般结构如下所示:
string str = "$1,000.00";
double output;
var success = Double.TryParse(
str
, NumberStyles.AllowLeadingWhite
| NumberStyles.AllowTrailingWhite
| NumberStyles.AllowLeadingSign
| NumberStyles.AllowDecimalPoint
| NumberStyles.AllowThousands
| NumberStyles.AllowExponent
| NumberStyles.AllowCurrencySymbol
, null // CultureInfo.InvariantCulture
// or NumberFormatInfo.InvariantInfo break conversion with '$'..
, out output
);
Console.WriteLine("'{0}' --> {1}, {2}", str, output, success);
这行得通。我遇到的问题是在 IFormatProvider
parameter 时处理“$”字符Double.TryParse()
方法设置为 CultureInfo.InvariantCulture
或 NumberFormatInfo.InvariantInfo
(即用注释掉的变量之一替换方法调用中的 null
)
这是为什么呢?我真的需要将该参数设置为适合输入字符串国际化的参数之一吗?此方法的初始实现将参数设置为 NumberFormatInfo.InvariantInfo
,这会中断包含“$”的字符串的转换。
最佳答案
这是为什么?
不变文化的货币符号是 ¤
,它不是美元符号。这就是它失败的原因。
但是,您不需要修改必须考虑到这一点的转换代码 - 但您可以修改传入的字符串。
static string ReplaceCurrency(string str)
{
return Regex.Replace(str, @"\p{Sc}", "¤");
}
这会将任何货币符号替换为不变符号 - 这将正确解析。
string str = "$1,000.00";
double output;
var success = Double.TryParse(ReplaceCurrency(str),
NumberStyles.Currency,
CultureInfo.InvariantCulture,
out output);
Console.WriteLine(output);
输出
1000
关于c# - 将带有 '$' 的字符串值转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31466452/