-2

コントローラーに次のコードがあります。

    private void setProgress(float value)
    {
        progress = (float)Math.Round(value,4);
    }

しかし、値がタイトルの数字のようなもの (int に非常に近い数字) の場合、それは機能せず、進行状況は元の値を取得するだけです。

なぜこうなった?

4

1 に答える 1

2

1 と 24 は、数値の計算方法によっては、2 進浮動小数点数を使用して正確に表されない場合があるためです。真の整数が必要な場合は、丸めてから int に変換します。

private void setProgress(float value)
{
    progress = Convert.ToInt32((float)Math.Round(value,0));
}

float を intと比較する必要がある場合(定数の場合でも、そのを非常に小さな数値と比較します。

private bool AreCloseEnoughToEqual(double d1, double d2)
{
    const double _EPSILON = 0.00000001;
    return Math.Abs(d1-d2) < _EPSILON;
}

整数であるかのように表示する必要がある場合は、小数点以下 0 桁で表示します。

 Console.WriteLine("{0:N0}",d1);
于 2012-05-18T13:35:45.963 に答える