繁体   English   中英

在保留原始格式的同时,将包含数值的字符串转换为具有不同区域性设置的相同字符串

[英]Convert a string containing a numeric value to the same string with different culture settings while preserving the original format

我有一个在某些区域性中包含数值的字符串(例如,字符串为“ $ 1000.00”,区域性为“ en”)。 我想将此字符串转换为其他区域性的字符串,同时保留尽可能多的有关原始格式的信息。 例如:

"$ 1000.00" en”文化中的"$ 1000.00" =>“ ru”文化中的"1 000,00 $"

我尝试了最明显的方法:

private static bool TryConvertNumberString(IFormatProvider fromFormat, IFormatProvider toFormat, string number, out string result)
{
    double numericResult;
    if (!double.TryParse(number, NumberStyles.Any, fromFormat, out numericResult))
    {
        result = null;
        return false;
    }

    result = numericResult.ToString(toFormat);
    return true;
}

但是,这不符合我希望的方式:double.TryParse“吃掉”有关货币符号,十进制数字等信息的所有信息。因此,如果我尝试使用这种方法,则:

string result;
TryConvertNumberString(new CultureInfo("en"), new CultureInfo("ru"), "$ 1000.00", out result);
Console.WriteLine(result);

我只会得到1000 ,而不是"1 000,00 $"

是否有使用.NET实现此行为的简单方法?

Double.ToString(IFormatProvider)方法使用默认的常规( "G" )格式说明符,并且该说明符不返回当前NumberFormatInfo对象的CurrencySymbol属性。

您可以仅使用"C" (或货币)格式说明符作为您要查找的ToString方法中的第一个参数。

result = numericResult.ToString("C", toFormat);

Here a demonstration

顺便说一句, ru-RU文化将用作CurrencySymbol ,如果需要$作为结果,则可以Cloneru-RU文化,设置此CurrencySymbol属性,然后在toFormat部分中使用克隆的文化。

var clone = (CultureInfo)toFormat.Clone();
clone.NumberFormat.CurrencySymbol = "$";
result = numericResult.ToString("C", clone);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM