8

全て、

Borland C++ コードを C# に変換しようとしています。古いコードでは、次のように表示されます。

double a = RoundTo( b, -2 );

Borland のドキュメントを見ると、RoundTo() は精度のために正と負の両方のパラメーターを受け入れることがわかります。正は 10^n に、負は 10^-n に丸めることを意味します。

Math.RoundTo() の C# ドキュメントを見ると、精度に負の数を受け入れるかどうかの参照が見つかりません。また、すべてのサンプルに正の数が表示されます。

この場合、コードを変換する適切な方法は何ですか? サインを忘れて、次のように書く必要があります。

double a = Math.Round( b, 2 );

ありがとうございました。

4

3 に答える 3

5

あなたが行おうとしている丸めのタイプに対する組み込みのソリューションを認識していませんが、それはどこにもないという意味ではありません。簡単な解決策は、探していることを行うメソッドまたは拡張メソッドを作成することです。

double DoubleRound(double value, int digits)
{
    if (digits >= 0)
    {
        return Math.Round(value, digits);
    }
    else
    {
        digits = Math.Abs(digits);
        double temp = value / Math.Pow(10, digits);
        temp = Math.Round(temp, 0);
        return temp * Math.Pow(10, digits);
    }
}
于 2012-08-20T20:19:04.173 に答える
4

C#の double の Math.Round は、数字の負の値を受け入れることができません(実際には、数字が 0 未満または 15 より大きい場合に ArgumentOutOfRangeException をスローすることがそのページに記載されています)。

パラメータは Math.Round の場合であり、代わりに特定の小数桁数を要求します。これは、パラメータの符号が逆になることを意味します。したがって、あなたの場合、はい、

double a = Math.Round( b, 2 );

-2 パラメーターを指定した RoundTo の正しい変換になります。

于 2012-08-20T19:49:56.180 に答える
2

試してみましたか?私はそうしましたが、例外がありました:

System.ArgumentOutOfRangeException: 丸め桁数は 0 から 15 の間である必要があります。
パラメータ名:数字
   System.Math.Round で (Double 値、Int32 桁)
   MyClass.RunSnippet() で
   MyClass.Main() で
于 2012-08-20T19:50:17.923 に答える