将十进制值转换为货币字符串以在HTML中显示的最佳方法

时间:2020-03-06 14:19:20  来源:igfitidea点击:

我想在我的网上商店中显示我的产品的价格。
我目前正在做:

<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("£","&pound;")%>
</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文化)。