2017-06-15 15 views
4

以下の関数の結果は「10.000」になります。私がここに住んでいるのは、 "万"という意味です。Rustでフォーマッタの小数点記号を変更するにはどうすればよいですか?

format!("{:.3}", 10.0); 

出力を「10,000」にしたいと思います。

+0

[Rust:1000セパレータ付きの印刷/書式番号](https://stackoverflow.com/questions/26998485/rust-print-format-number-with-thousand-separator) – ljedrz

+0

@ljedrzいいえ、 OPは浮動小数点を明確に求めます。あなたの質問は整数についてです。 – Stargateur

+0

その質問への答えは浮動小数点数も扱っていますが、あなたは正しいです。この質問は正確には重複していません。 – ljedrz

答えて

4

標準ライブラリは、この機能(番号形式の局在を)持っていないので、あなただけのカンマでドットを置き換えることができます。

fn main() { 
    println!("{}", format!("{:.3}", 10.0).replacen(".", ",", 1)); 
} 

あり、これを行う他の方法がありますが、これはおそらくです最も単純な解決策です。

+0

私はこのソリューションを憎むが、私は私が最初にそれが存在し、それを自分自身を実装しようとしたことを忘れて – r03

+0

:-)現時点では選択肢がないし、私を信じて推測する - この1つは実際にはかなり楽しいです;)。 – ljedrz

1

これはマクロformat!の役割ではありません。このオプションは、Rustによって処理される必要があります。残念なことに、私の検索は、Rustがロケールを扱っていないという結論に導いています(まだですか?)。

は、ライブラリrust-localeありますが、彼らは、アルファにまだあります。

4

錆標準ライブラリで焼い国際化(I18N)またはローカライゼーション(L10N)はサポートされていません。


は順不同で、いくつかの理由があります。

  1. は、ロケールに依存する出力は意識的な選択ではなく、デフォルトである必要があり、
  2. I18NとL10Nはちょうどよりもはるかに複雑です書式番号
  3. 錆が目立たないようにする。

format!機械は、JSONまたはXMLファイルを書き込むために使用されます。実際には、エンコーディングしたマシンのロケールに応じて、別のフォーマットのファイルで終わることは望ましくありません。それは災害のためのレシピです。

実行時のロケールの検出にも最適化非友好的です。突然あなたはコンパイル時に(部分的に)事前に計算することはできません。コンパイル時に割り当てるバッファのサイズを知ることさえできません。

これは疑わしい有用性と結びついています。日付と数字は間違いなく重要ですが、英語と英語のフォーマット戦争は、最終的に海洋の低下です。フランス語の文法勉強者は、数字が典型的なフランス語の書式で書かれていることは確かに分かります...しかし、周囲のテキストが英語であれば彼女の役に立たないでしょう。(フランス語は外国語の教え方/学習に悪いです。ロケールは、など、ソート順、言語の選択に影響を与える必要があります...単に数字の形式を変更することは(良い基盤を提供するCライブラリのgettextをチェックし、はそれで切り替える必要がありますすべて無意味であり、これははるかに深刻なサポートが必要です)。

ホストロケール上のロケールの検出に基づいて、プロセス全体にグローバルであることも、非常にで、マルチスレッドWebサーバーのこの時代には疑わしいアーキテクチャの選択です。 Facebookがヨーロッパのスウェーデンで提供されたのは、そのデータセンターがそこで実行されているからだと想像してください。

は最後に、このすべての言語/日付/ ...サポートは、データのでかい量を必要とします。 ICUには数十種類(または何百種類もありますか?)のそのようなデータのMBの埋め込まれた。これにより、stdのサイズが爆発的になり、組み込み開発にはまったく適していません。とにかくこのことは気にしないでしょう。

もちろん、標準ライブラリの外に置くためのもう一つの議論である、ほんの一握りの言語をサポートすることを選択しただけで、これを大幅に減らすことができます。

+2

確かに、しかし、OPはstd' 'について話すことはありません:錆チームで焼いた国際化のためのいくつかの公式のexternクレート、可能性があります。あなたは 'std'にこのようなものを置くのではなく、現代的な言語で発展させることについて、まさにIMOです。これはどこかに存在しなければなりません。 – Boiethios

+3

@Boiethios:私はあなたを聞く...しかし、SOフォーマットはちょうど良く、残念ながらライブラリを推薦へ向いていません。最も顕著なのは、解答の慣性のため、今から2年後に死んだ図書館が参照される可能性があります(これは、そのような参照を求める質問が閉鎖されている、btwです)。したがって、私は標準ライブラリがなぜそれを提供しないのかという説明に自分自身を制限することを好む。これは、店の周りではなく、してみてくださいとstdソリューションを待つOP(/ ... IRC/Redditの/ユーザーフォーラムに質問を、crates.ioの「ロケール」で検索)を解放します。 –

+0

あなたは正しいです。私は何かに答えるときにそれについて考えるでしょう。 – Boiethios

関連する問題