Java BigDecimal.setScale 関数の有効期限リマインダーから、コーディングとカプセル化のアイデアを見てみましょう (ソース コードを簡単に読んでください)

序文

記事を書くのはとても久しぶりです。今日は楽しいことですが、私にとって意味のあることを共有します。

 

文章

JDK java11 を使用すると、小数点以下の桁を保持する関数 setScale に有効期限のリマインダーがマークされていることに気づいた人はいますか。

public BigDecimal setScale(int newScale, introundingMode)

クリックすると、実際には 9 から始まるマークが付いていることがわかりました。
 

次に、作成者が提供する新しい関数を見てみましょう。これは実際には外部のレイヤーです。
 

 

この変化から何が考えられますか?

著者が参照を変更しました。int 自体を渡すことは、代わりに列挙型を使用するように変更されます。

個人的分析:

まず、元の関数の入力パラメータや新しい関数の入力パラメータの名前に関係なく、

RoundingMode: 丸めモード

つまり、この関数は四捨五入のためのものなので、当然サポートされるモードは無制限ということでしょうか?

それは絶対に不可能です。

では、元の期限切れの関数を見て、コードの先頭に判定が書かれていたらどうなるでしょうか?

作者は、このサポートされているモードは 0 ~ 7 だけであると言っています。ランダムに送信しないでください。送信すると、メッセージが傍受されます。

それで、これは良いパッケージですか?誰もが自分で考えます。

次に、新しい関数の変更点を見てみましょう。

① 元のロジックが同じであることが保証され、機能を置き換える者はロジックが変わったかどうかを比較する必要がありません。

② int パラメータを独自定義の丸め列挙型に置き換えました。 

新しい関数に従う場合、この列挙の属性のみを渡すことができます。つまり、丸めモードには 0 ~ 7 のみという制限があります。

違反のために傍受されるパターンはありません。

また、列挙型の名前から、各モードの簡単な機能をより直接的に確認することもできます (もちろん、私の英語は苦手です。調べて初めて知りました)。

 

ゼロ以外である限り、1 進みます
ゼロ以外の場合は破棄します
シーリング 値がゼロより大きい場合は 1 を入力し、値がゼロより小さい場合は破棄します。
値がゼロより小さい場合は 1 を入力し、値がゼロより大きい場合は破棄します。
ハーフアップ 丸める
ハーフダウン 5 より大きい場合のみ 1 が入力され、5 に等しい場合は四捨五入されます。
ハーフイーブン 最も近い数字に向かって四捨五入する、または隣接する 2 つの数字間の距離が等しい場合は切り下げる丸めモード。破棄された部分が 0.5 を超える場合、丸め動作は RoundingMode.UP と同じになります。それ以外の場合、丸め動作は RoundingMode.DOWN と同じになります。
不要 最も近い数値に向かって四捨五入するモード。隣接する 2 つの数値間の距離が等しい場合、隣接する偶数に向かって四捨五入します。切り捨てられる部分の左側の数値が奇数の場合、丸め動作は RoundingMode.HALF_UP と同じになり、偶数の場合、丸め動作は RoundingMode.HALF_DOWN と同じになります。この丸めモードは、一連の計算が繰り返されるときの累積誤差を統計的に最小限に抑えることに注意してください。この丸めモードは「バンカーズ丸め」とも呼ばれ、主に米国で使用されています。この丸めモードは、Java で float および double アルゴリズムに使用される丸め戦略に似ています。
 

ハーフ_イーブン:

不要:

さて、これについて話しましょう。

 

おすすめ

転載: blog.csdn.net/qq_35387940/article/details/135084486