HTML で表示するために 10 進数値を通貨文字列に変換する最良の方法
-
01-07-2019 - |
質問
オンラインストアで商品の価格を表示したいと考えています。私は現在次のことを行っています:
<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>
解決
£ 記号 (U+00A3)、および HTML エンティティ & #163;そして&ポンド;ブラウザではすべて同じように表示されるはずです。
ブラウザが£を認識しない場合、エンティティのバージョンを認識できない可能性があります。これは ISO 8859-1 (Latin-1) なので、Mozilla ブラウザーでレンダリングできないとしたら驚くでしょう (私の FF では確かにレンダリングできます)。
$ 記号が表示された場合は、次の 2 つのことが考えられます。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") などの文字列形式では、asp.net が currentCulture を設定しているため、en-GB ロケールが使用されます。あなた
(ただし、偏執的な場合は、オーバーロードで en-gb カルチャを指定できます)。
他のヒント
これを試してみてください。アプリケーションに設定されているロケールが使用されます。
<%=String.Format("{0:C}",GetPrice())%>
使用
GetPrice().ToString("C", CultureInfo.CreateSpecificCulture("en-GB"))
価格から文字列への変換を実行する関数を作成できます。このようにして、出力を詳細に制御できます。
ロケールの問題は、ロケールが Web サーバーに依存し、Web ブラウザーに依存しないことです。
ローカリゼーションを明示的に指定する必要がある場合は、CultureInfo を使用してそれを文字列フォーマッタに渡すことができます。
10 進数値の ToString("C2") プロパティを使用するだけです。web.config でグローバリゼーションを設定します。シンプルにしてください。