通常string.Format()
、フォーマットされた文字列を取得するために使用します。
しかし、すべての金額を数字ではなくテキストとして印刷する必要があるという要件がありました。
つまり、次のようなものです:
Format(3000, "us"); // => Resulting text: "three thousand dollars"
それを処理できる.NETライブラリはありますか(ロシア語は必須です)?
あなたが必要とすることを行うための成熟したライブラリがあります。いわゆるヒューマナイザーです。
ここでその内容を確認できます:今週の NuGet パッケージ: Humanizer は .NET データ型をより人間的にします
オープンソース プロジェクトはGitHub にあります
ご覧のとおり、必要なことだけでなく、さらに多くのことを実行します。そして、それは多くのローカリゼーションを持っています。
いくつかの例:
1.ToWords() => "one"
10.ToWords() => "ten"
11.ToWords() => "eleven"
122.ToWords() => "one hundred and twenty-two"
3501.ToWords() => "three thousand five hundred and one"
2 番目の引数 GrammaticalGender を ToWords に渡して、数値を出力する性別を指定することもできます。
1.ToWords(GrammaticalGender.Masculine) => "один"
1.ToWords(GrammaticalGender.Feminine) => "одна"
1.ToWords(GrammaticalGender.Neuter) => "одно"
それを処理できる.NETライブラリはありますか(ロシア語は必須です)?
簡単な答え:いいえ。
あなたは自分で書く必要がありますが、次のことを確認することをお勧め し ます. これらの1つが言うように、プロジェクトオイラー問題番号17を見て、より広いGoogle検索に使用してください.
その上、通貨名の問題があります'us'
。通貨または言語、またはその両方を示す必要がありますか? カナダドルはアメリカドルと違うのですか.
たとえば、これは組み込まれています:
// Gives USD
var ISOCode = System.Globalization.RegionInfo.RegionInfo("US").ISOCurrencySymbol
// Gives $
var symbol = System.Globalization.RegionInfo.RegionInfo("US").CurrencySymbol
// Gives USD Dollar (i believe :))
var nameUSDENG = System.Globalization.RegionInfo.RegionInfo("US").CurrencyEnglishName
// Gives Svensk Krona
var nameSEKSWE = System.Globalization.RegionInfo.RegionInfo("SE").CurrencyNativeName
// Gives Swedish Krona
var nameSEKENG = System.Globalization.RegionInfo.RegionInfo("SE").CurrencyEnglishName
そこから始めて、パスがどこに行くのかを確認することをお勧めします。
私はそれをテストしていませんが、これで問題が解決するでしょうか?
ロシア語にも対応しているとのことです。
パッケージの説明から:
数値からテキストへのコンバーター。対応言語 英語 ロシア語 スペイン語 トルコ語
使用法:
var number = 123456.78
var moneyText = number.ToText("usd", "en");
var number = 123456.78;
var moneyText = number.ToText(Nut.Currency.USD, Nut.Language.English);
var number = 123456.78;
var options = new Nut.Options {
MainUnitNotConvertedToText = true,
SubUnitNotConvertedToText = true,
MainUnitFirstCharUpper = true,
SubUnitFirstCharUpper = true,
CurrencyFirstCharUpper = true,
SubUnitZeroNotDisplayed = true
}
var moneyText = number.ToText(Nut.Currency.USD, Nut.Language.English, options);
ロシア語の場合は、私のライブラリを使用できます: https://github.com/nick-buhro/NumToWords
nuget でも利用できます: https://www.nuget.org/packages/NickBuhro.NumToWords
例:
var unit = new UnitOfMeasure(Gender.Masculine, "доллар", "доллара", "долларов");
var text = RussianConverter.Format(3000, unit);
Console.WriteLine(text);
// Output: три тысячи долларов