我有一些字符串格式的问题,我在格式化特定格式时强迫文化:
get { return String.Format("{0:###,###,###,###,##0}", Convert.ToDecimal(_monthPay, new System.Globalization.CultureInfo("es-ES"))); }
所以我可以得到这个:
$ 300.000,01
在localhost上工作正常,但是当我发布到服务器时,我得到了这个:
$ 300,000.01
我不知道为什么!!!我无法访问服务器,因此无法更改服务器上的区域设置;还有另一种解决方法吗?以便我在localhost和发布时正常工作?
感谢。
答案 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")); }
编辑:移动文化信息..我仍然不认为使用一些大规模的格式字符串是对的。有货币的内置格式约定......