0

a、b、c の 3 つの double があるとします。

double a = 1.234560123;
double b = 7.890120123;

double c = a * b;

c = 9.740827669535655129

小数点以下 5 桁までの数値を操作したい。したがって、Math.Round(a, 5) と Math.Round(b, 5) を使用して a と b を丸めると、次のようになります。

double a_r = Math.Round(a, 5);
double b_r = Math.Round(b, 5);

a_r = 1.23456
b_r = 7.89012

double c_r = a_r * b_r;

c_r = 9.7408265472

しかし、c を計算すると、小数点以下 5 桁を超える数値が得られます (これは、すべての乗算、除算、増強、および同様の演算で発生します)。コード内のすべての結果を丸めることができますが、それは避けたい大変な作業です。

他の操作で c を使用し、この操作の結果を他の操作で使用するため、望ましくない小数点以下の桁数によるエラーを伝播しないように、毎回すべての中間結果を丸めたくありません。

操作とは関係なく、小数点以下の桁数が固定されている double を定義する方法はありますか?

4

3 に答える 3

4

通常、倍精度浮動小数点数はそのままにして、カスタム書式設定を使用して値を小数点以下 5 桁まで表示することをお勧めします。

double a = 1.234560123;
double b = 7.890120123;

double c = a * b;

Console.WriteLine("Result = {0:N5}", c);

数値を文字列に変換するほぼすべてのルーチンで、標準数値書式文字列とカスタム数値書式文字列を使用できます。

于 2013-02-15T16:58:05.020 に答える
0

小数点以下の桁数が制限されている double を定義することはできません。数値を表示するときは、数値のフォーマットに依存する必要があります。この質問を参照してください

于 2013-02-15T17:19:42.947 に答える
-1

Operator Overload を使用して問題を解決する方法を見つけました。

そのため、すべての演算を乗算、除算、複素乗算、行列演算として再定義し、結果を必要な小数点以下の桁数に丸めました。

例:

public static double operator *(double d1, double d2)
{
    double result;
    result = Math.Round(d1 * d2, 5);

    return result;
}
于 2013-02-15T19:25:25.240 に答える