世界の「,」(カンマ)と「.」(ピリオド)を解き明かす
エキサイトニュースの 「,」(カンマ)と「.」(ピリオド)の不思議な関係 という記事で、世界各国で数値の表記がどう違うかという話題を取り上げている。
「そしてギリシャは……ギリシャ語がわからん! 調査断念。」
なんて書いてあるけど、こういうのはウェブで各国語を検索するよりも、国際化されたアプリケーションを見てみると回答が得やすい。
たとえば、Windows だと[コントロールパネル]-[地域と言語]-[地域オプション] で「使う言語」を切り替えると、各国での数値のフォーマットや通貨単位、時間の表記などを知ることができる。実際に切り替えなくても選択するだけで表示は変わるので、フォーマットを確認したらキャンセルしてもいい。
各国向けに国際化されたアプリケーションでは、それぞれの国の人がバグレポートを出してくるので、自然に間違いが正されることが多い。ま、メジャーなアプリケーションじゃないと直らないけど。
Java も国際化の扱いは充実してるので、こういった一覧を取ることができる。
| 国名 | 数字表記 |
| アラブ首長国連邦 | 1,234,567.89 |
| バーレーン | 1,234,567.89 |
| アルジェリア | 1,234,567.89 |
| エジプト | 1,234,567.89 |
| イラク | 1,234,567.89 |
| ヨルダン | 1,234,567.89 |
| クウェート | 1,234,567.89 |
| レバノン | 1,234,567.89 |
| リビア | 1,234,567.89 |
| モロッコ | 1,234,567.89 |
| オマーン | 1,234,567.89 |
| カタール | 1,234,567.89 |
| サウジアラビア | 1,234,567.89 |
| スーダン | 1,234,567.89 |
| シリア | 1,234,567.89 |
| チュニジア | 1,234,567.89 |
| イエメン | 1,234,567.89 |
| インド | १,२३४,५६७.८९ |
| イスラエル | 1,234,567.89 |
| 日本 | 1,234,567.89 |
| 大韓民国 | 1,234,567.89 |
| タイ | 1,234,567.89 |
| タイ | ๑,๒๓๔,๕๖๗.๘๙ |
| ベトナム | 1.234.567,89 |
| 中華人民共和国 | 1,234,567.89 |
| 香港 | 1,234,567.89 |
| 台湾 | 1,234,567.89 |
| ベラルーシ | 1 234 567,89 |
| ブルガリア | 1 234 567,89 |
| スペイン | 1.234.567,89 |
| チェコ | 1 234 567,89 |
| デンマーク | 1.234.567,89 |
| オーストリア | 1.234.567,89 |
| スイス | 1'234'567.89 |
| ドイツ | 1.234.567,89 |
| ルクセンブルク | 1.234.567,89 |
| ギリシア | 1.234.567,89 |
| オーストラリア | 1,234,567.89 |
| カナダ | 1,234,567.89 |
| イギリス | 1,234,567.89 |
| アイルランド | 1,234,567.89 |
| インド | 1,234,567.89 |
| ニュージーランド | 1,234,567.89 |
| 南アフリカ | 1,234,567.89 |
| アルゼンチン | 1.234.567,89 |
| ボリビア | 1,234,567.89 |
| チリ | 1.234.567,89 |
| コロンビア | 1,234,567.89 |
| コスタリカ | 1,234,567.89 |
| ドミニカ共和国 | 1,234,567.89 |
| エクアドル | 1,234,567.89 |
| スペイン | 1.234.567,89 |
| グアテマラ | 1,234,567.89 |
| ホンジュラス | 1,234,567.89 |
| メキシコ | 1,234,567.89 |
| ニカラグア | 1,234,567.89 |
| パナマ | 1,234,567.89 |
| ペルー | 1.234.567,89 |
| プエルトリコ | 1,234,567.89 |
| パラグアイ | 1.234.567,89 |
| エルサルバドル | 1,234,567.89 |
| ウルグアイ | 1.234.567,89 |
| ベネズエラ | 1.234.567,89 |
| エストニア | 1 234 567,89 |
| フィンランド | 1 234 567,89 |
| ベルギー | 1.234.567,89 |
| カナダ | 1 234 567,89 |
| スイス | 1'234'567.89 |
| フランス | 1 234 567,89 |
| ルクセンブルク | 1 234 567,89 |
| クロアチア | 1.234.567,89 |
| ハンガリー | 1 234 567,89 |
| アイスランド | 1.234.567,89 |
| スイス | 1'234'567.89 |
| イタリア | 1.234.567,89 |
| リトアニア | 1.234.567,89 |
| ラトビア | 1 234 567,89 |
| マケドニア | 1.234.567,89 |
| ベルギー | 1.234.567,89 |
| オランダ | 1.234.567,89 |
| ノルウェー | 1 234 567,89 |
| ノルウェー | 1 234 567,89 |
| ポーランド | 1 234 567,89 |
| ブラジル | 1.234.567,89 |
| ポルトガル | 1.234.567,89 |
| ルーマニア | 1.234.567,89 |
| ロシア | 1 234 567,89 |
| スロバキア | 1 234 567,89 |
| スロベニア | 1.234.567,89 |
| アルバニア | 1.234.567,89 |
| スウェーデン | 1 234 567,89 |
| トルコ | 1.234.567,89 |
| ウクライナ | 1.234.567,89 |
| アメリカ合衆国 | 1,234,567.89 |
コードは以下。最近 Java 使ってなかったので、いろんなものが思い出せなくて苦労した。書き方とか使ってるクラスとか古臭いかったら申し訳ない。
import java.util.List;
import java.util.ArrayList;
import java.util.Locale;
import java.text.NumberFormat;
import java.io.FileOutputStream;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
/**
* show number formats example in all Java-available countries
*
* usage:
* > javac WorldNumberFormats.java
* > java WorldNumberFormats
* (open result.txt with UTF-8 compatible editors/browsers)
*
*/
public class WorldNumberFormats {
public static void main(String argv[]) {
double amount = 1234567.89;
PrintWriter writer = null;
try {
writer =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("result.txt"), "UTF-8"
)
)
);
Locale[] allLocales = Locale.getAvailableLocales();
for (Locale oneLocale : allLocales) {
String localeCountry = oneLocale.getDisplayCountry();
if (localeCountry == null || localeCountry == "") {
// this locale is language-locale so ignore it
continue;
}
NumberFormat oneFormat =
NumberFormat.getNumberInstance(oneLocale);
writer.println(
localeCountry + " :t" + oneFormat.format(amount));
}
writer.flush();
writer.close();
} catch (Exception ex) {
if (writer != null) {
writer.flush();
writer.close();
}
ex.printStackTrace();
}
}
}