1. ホーム
  2. c#

二重丸を有効数字xにする

2023-08-22 06:12:25

質問

double(234.004223)などがあった場合、これをC#で有効数字x桁に丸めたいのですが、可能でしょうか?

今のところ、小数点以下x桁に丸める方法しか見つかりませんが、これは単に数値に0があると精度が落ちるだけです。

例えば、0.086を小数点以下1桁にすると0.1になりますが、0.08のままであってほしいのです。

どのように解決するのですか?

フレームワークには、有効数字の数に丸める(または切り捨てる)ための組み込み関数がありません。 しかし、これを行うことができる 1 つの方法は、最初の有効桁が小数点の直後になるように数値をスケーリングし、丸め (または切り捨て)、それからスケーリングバックすることです。 次のコードでうまくいくはずです。

static double RoundToSignificantDigits(this double d, int digits){
    if(d == 0)
        return 0;

    double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(d))) + 1);
    return scale * Math.Round(d / scale, digits);
}

もし、あなたの例のように、どうしても切り捨てたいのであれば

static double TruncateToSignificantDigits(this double d, int digits){
    if(d == 0)
        return 0;

    double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(d))) + 1 - digits);
    return scale * Math.Truncate(d / scale);
}