2

すべての通貨を次の形式で表示する必要があります。

"[Code] [Symbol]#,##0.00;[Code] [Symbol](#,##0.00)"

ユーザーは国を選択し、外部サービスから通貨コードと記号を取得します。次に、string.replace を使用して、通貨コードと記号を上記の書式文字列に設定します。

したがって、値 123.456 (米ドル) は次のようにフォーマットされます。

"USD $123.46"

このアプローチはほとんどの通貨記号で機能しますが、クウェートの通貨記号د. に問題があります。数値の前に記号を表示できるように値をフォーマットすることはできないようです。私は手紙に関して同じ問題を抱えていません。これは、アラビア語が右から左に書かれるという事実と関係があると考えています。シンボルはブラウザでもそのように動作します。左から右に選択することはできません。選択は右から始まります。また、linqpad でテストしていたとき、文字列は[Kuwait_Symbol]#,##0.00と表示されましたが、stackoverflow テキスト ボックスに貼り付けると、文字列がد.क#,##0.00になりました。

文字列内の文字の順序が変更されていることに注意してください。

シンボルを使用することは現実的ではないことをお勧めしなければならないと感じていますが、この問題を回避する方法はありますか? また、数字の前に記号を表示できないのはなぜですか?

4

1 に答える 1

0

この問題は、ブラウザーと、それらを生成するコードではなく、右から左へ記述する言語での文字の処理方法に起因します。試してみると

var kuwaitCulture = new System.Globalization.CultureInfo("ar-KW");
Response.Write(Server.UrlEncode(amount.ToString("c", kuwaitCulture)));

返されるものには、金額の前に CurrencySymbol が明確に含まれていることがわかります。

これを回避するには、対応する Unicode 文字を使用してブラウザで左から右へのレンダリングを強制できます。例えば、

Response.Write('\u202A' + kuwaitCulture.NumberFormat.CurrencySymbol + '\u202C' + amount);

仕様に従って正しくレンダリングされます。

于 2011-06-26T07:45:35.100 に答える