货币格式

时间:2009-12-28 16:18:47

标签: c# .net globalization

我有一些字符串格式的问题,我在格式化特定格式时强迫文化:

get { return String.Format("{0:###,###,###,###,##0}", Convert.ToDecimal(_monthPay, new System.Globalization.CultureInfo("es-ES"))); }

所以我可以得到这个:

$ 300.000,01

在localhost上工作正常,但是当我发布到服务器时,我得到了这个:

$ 300,000.01

我不知道为什么!!!我无法访问服务器,因此无法更改服务器上的区域设置;还有另一种解决方法吗?以便我在localhost和发布时正常工作?

感谢。

5 个答案:

答案 0 :(得分:5)

您将CultureInfo传递到了错误的位置。

通过将CultureInfo传递给Convert.ToDecimal,您告诉Convert.ToDecimal使用该文化转换数字。 (如果_monthPay是一个字符串并且需要解析,则这是相关的)
但是,您没有将CultureInfo传递给String.Format,因此它仍然使用默认文化。

顺便说一句,如果您要组合多个值,则只应使用String.Format。在您的情况下,您应该调用ToString重载。此外,您的格式字符串不必要很长;你可以简单地写#,0。如果您想要包含货币符号,只需使用C代替。

因此,您应该写Convert.ToDecimal(_monthPay).ToString("#,0", new System.Globalization.CultureInfo("es-ES"))

答案 1 :(得分:1)

Thread.CurrentUICulture = CultureInfo.GetCultureInfo("es-ES");

尝试将其放入某个初始化块中。

答案 2 :(得分:1)

get 
{ 
    var culture = new System.Globalization.CultureInfo("es-ES");
    return Convert
        .ToDecimal(_monthPay, culture)
        .ToString("###,###,###,###,##0", culture); 
}

答案 3 :(得分:1)

你在这里做的是告诉Convert.ToDecimal函数_monthPay会是什么样子。您期望的是String将使用文化信息进行格式化。

你应该告诉String.Format使用什么文化:

String.Format( new System.Globalization.CultureInfo("es-ES"), "{0:###,###,###,###,##0.##}", Convert.ToDecimal(_monthPay)));

答案 4 :(得分:0)

除了使用真正长的自定义格式外,还有内置的货币格式呢?

get { return Convert.ToDecimal(_monthPay).ToString("C", new System.Globalization.CultureInfo("es-ES")); }
编辑:移动文化信息..我仍然不认为使用一些大规模的格式字符串是对的。有货币的内置格式约定......