- 通貨金額の操作は一般的なコンピューティング作業だが、主要なプログラミング言語には金額を表す基本データ型がない
- そのため、分割払い、外国為替取引、手数料処理、税金徴収のような作業で丸めの問題が発生する可能性がある
- Money は金額の計算と割り当てを簡単にするためのKotlinライブラリ
- 金額の数学演算、パーセンテージ計算、割り当てをサポートし、さまざまなユースケースをモデル化できる
- 暗号資産も標準でサポートする
- 割り当て機能
- ライブラリの最大の利点の1つは割り当て機能
- 金額を複数の部分に分けても、元の金額と同一であることを保証する
- たとえば、顧客が USD 100.00 の購入を3回の分割払いで支払う場合、丸めの問題による損失を防げる
- 割り当て方法
allocate() メソッドを使って、元の金額との差分が生じない結果を保証する。
- 比率に応じて割り当てるには、
Percentage の値をリストで渡す。
- デフォルトではライブラリが差分を自動で割り当てるが、望む割り当て戦略に調整可能。
- まとめ
- この記事はライブラリの機能を簡単に紹介したもの。
- APIを簡潔に保ちつつ、Android開発のサポートや永続化・シリアライズ機能を段階的に拡張していく予定。
- 現在のバージョンが、Kotlinプロジェクトで金額を扱う人々にとって有用であることを願っている。
GN⁺の要約
- 金額を扱うことはプログラミングでよくある作業だが、丸めの問題によって複雑になることがある。
- Moneyライブラリは、こうした問題を解決するために設計されたKotlinライブラリで、金額の正確な割り当てと計算をサポートする。
- このライブラリは306種類の通貨と2283種類の暗号資産をサポートしており、Kotlinプロジェクトで金額を扱う際に役立つ。
- 類似機能を持つ他のプロジェクトとしては、JavaのJoda-Moneyライブラリなどがある。
1件のコメント
Hacker News の意見
infix 関数の使用がやや不自然に感じられる
increaseByとdecreaseByの代わりにplusとminusをオーバーロードしなかった理由が気になるライブラリの公開おめでとう、そして共有に感謝
Rebolの金銭型の使いやすさを思い出させる
金銭処理で発生するエッジケースについての質問
ユーザー定義通貨のサポートが気に入った
スプレッドシート言語が金銭をうまくサポートしていないのは不思議
C# の decimal 型は金銭計算に適している
コメントから多くを学び、ライブラリの次の改善に役立てるつもり
ライブラリよりも、あらゆるエッジケースを扱う徹底したテストスイートが欲しい
要件をすべて満たしているように見え、金銭処理の主な難しさについて良い議論がある