任意の数から単語の数を生成します

一度、1つのプロジェクトの金額で世代を記述する必要がありました。 既製のソリューションを検索しても何も導かれなかったため、結果として、小さなC ++クラスが生まれ、数字に相当する資本が生成されました。 嬉しいボーナスとして、ルーブルとドルのサポートを追加しました(これはそのプロジェクトに必要でした)。 catの下には、少しの理論とGitリポジトリへのリンクがあります。



理論


番号の名前


ロシア語では、1〜9(いわゆる単位 )および10〜20(単位の2行目)の番号には個別の名前があります。 20の後、個々の名前は数十個になり、ユニットのカテゴリから数十個のカテゴリ番号を名前に追加することで番号が形成されます。



例:





数百に数十1が含まれ、 数千には上記の名前がす​​べて含まれています。 したがって、番号の順序が大きくなると、つまり、新しい順序にはそれぞれ以前の順序がすべて含まれます。



女性および男性の性別順序名


次の機能があります。 100未満の数を形成する場合、問題はありませんが、大量の資本に相当する数を形成する場合、数百、数十、単位、つまり数千、数百万などを示す言葉があります。



数字には次のようなオプションがあります。



など



ルールは次のとおりです。

  1. 女性の注文の名前については、1と2( onetwo )を変更する必要があります。
  2. 両方の属について、番号1、2から4のグループ、さらに20のグループ(11から19のユニットの2行目を含む)のオーダー名の末尾は、異なる方法で傾斜しています。




例:







これらの機能を知っていれば、資本数ジェネレーターのロジックを作成できます。



クラス


番号生成メカニズムは次のように機能します。



  1. 入力で数値を受け取った後、数値のカテゴリ(数百万、数千以下)を決定します。
  2. 注文ごとに、数百、数十、および単位を生成し、最後に注文の名前を追加します。




そして、C ++クラスのPropisが生まれました 。 出力のdouble値から、100分の1の精度で大文字の値と数値の通貨(ある場合)を含む文字列が取得されます。 最大10億の数値の生成を実装し、必要に応じて、数十億以上のサポートを簡単に行うことができます。 標準のcmathおよびstd ::文字列ライブラリのみに依存します。



C ++コードでの使用例:

Propis *propis = new Propis; double value = 345.12; //        std::string resultString = propis->conv(value, Propis::Dollar); // "   ,  "
      
      







iOSプログラムでの使用例:

 - (IBAction)valueChanged:(UITextField *)sender { Propis propis; double value = [sender.text doubleValue]; std::string stdResultString = propis.conv(value, Propis::NoCurrency); NSString *resultString = [NSString stringWithUTF8String:stdResultString.c_str()]; self.resultView.text = resultString; }
      
      







クラスソースコードリポジトリはこちらです。 誰かが重宝してくれたら嬉しいです。



All Articles