web-dev-qa-db-ja.com

クラスの関数によって返された結果を丸める適切な方法

クラスShapeがあると仮定します。このクラスには、area()とperimeter()という2つの関数があります。

CircleとSquareがShapeを継承し、これらのメソッドをオーバーライドするとします。明らかに結果はフラクショナルになります。

結果の精度値を設定する最良の方法は何ですか。ユーザーがPRECISION = 2またはPRECISION = 3と言うと、CircleおよびSquareクラスの関数によって返される結果がそれに応じて返されます。この機能はどこに定義すればよいですか? numpyのようなライブラリがこの状況をどのように処理するのか疑問に思いました。

1つのアプローチは、これらの関数にオプションのパラメーターを追加し、それに応じて結果を丸めることです。

getArea(radius, prec=2) {

}
1
Abhishek Kumar

JavaScriptの範囲内で、精度の指定を許可しないでください。 Numberを返し、呼び出し側に必要な精度を決定させるだけです。これは、エンドユーザーに領域を表示するためである可能性が高く、16桁の小数点が読みづらくなります。ほとんどの場合、精度を四捨五入することは、アプリケーションのプレゼンテーション層の問題です。このため、Numberクラスにはすでに機能 Number#toFixed または Number#toPrecision があります。

5
Greg Burghardt

あなたが提案したようにオプションの引数を使用することは素晴らしいオプションであり、ユーザーが各呼び出しで異なる精度を使用したい場合に便利です。

別の適切なオプションは、クラスに精度フィールドを持つことです。次に、ユーザーはクラス作成の精度を設定するか、必要に応じて後で変更できます。呼び出し元はどこでも精度を設定することを覚えておく必要がないため、これは一貫した動作に適しています。

どちらの方法でも問題ありませんが、選択は使用ニーズとモデリングの目的によって異なります。

0
lmarchesoti