将十进制值转换为货币字符串以在HTML中显示的最佳方法
我想在我的网上商店中显示我的产品的价格。
我目前正在做:
<span class="ourprice"> <%=GetPrice().ToString("C")%> </span>
其中GetPrice()返回一个小数。因此,这目前会传回一个值,例如" 12.00"
我认为输出" 12.00"的正确HTML是"12.00
",因此尽管在大多数浏览器中都可以正常显示,但某些浏览器(Mozilla)显示为$ 12.00。
(服务器位于英国,并在web.config中适当地设置了本地化)。
以下是一种改进,还是有更好的方法?
<span class="ourprice"> <%=GetPrice().ToString("C").Replace("£","£")%> </span>
解决方案
试试这个,它将为应用程序使用语言环境集:
<%=String.Format("{0:C}",GetPrice())%>
如果我们需要明确声明本地化,则可以使用CultureInfo并将其传递给字符串格式化程序。
使用
GetPrice().ToString("C", CultureInfo.CreateSpecificCulture("en-GB"))
我们可以编写一个函数来执行从价格到字符串的转换。这样,我们可以对输出进行很多控制。
区域设置的问题在于它取决于Web服务器,而不取决于Web浏览器。
只需使用十进制值的ToString(" C2")属性即可。在web.config中设置全球化,使其保持简单。
符号(U + 00A3)和html实体&#163;和&磅;应该都在浏览器中呈现相同的图像。
如果浏览器无法识别,则可能无法识别实体版本。
它在ISO 8859-1(Latin-1)中,因此如果Mozilla浏览器无法渲染(我的FF当然可以渲染),我会感到惊讶。
如果看到$符号,则可能有两件事:
1.浏览器默认语言为en-us
2. Asp.net正在自动进行区域设置切换。默认的web.config设置类似于
<globalization culture="auto:en-us" uiCulture="auto:en-US" />
因为我们(几乎可以肯定)想要仅英国的价格,所以只需在web.config中指定区域设置即可:
<globalization culture="us" uiCulture="en-gb" />
(或者在页面级别:)
<%@Page Culture="en-gb" UICulture="en-gb" ..etc... %>
此后,诸如String.Format(" {0:C}",GetPrice()和GetPrice()。ToString(" C")之类的字符串格式将使用en-GB语言环境,因为asp.net将为你
(尽管如果我们偏执,可以在重载中指定en-gb文化)。