3

ここでちょっとした問題が発生しました。次のコードがあるとします。

int whole = 0;
double decimal = 88.00

whole = decimal / 1.5; //now the answer is 58.66

これが問題です。 double を int に明示的にキャストするのは簡単です。しかし、今これを行うと、「全体」が 59 に設定されます。これはあまり良くありません。最後の整数 (58) に設定したいのです。

これを C# でどのように行うのですか?

4

6 に答える 6

7

double を整数に丸めるには、4 つの基本的な数学関数があります。

  1. Math.Round()- 最も近い整数 (またはユーザーが指定した小数点以下の桁数) に丸め、中間点を上または下に丸めることができます。

  2. Math.Floor()- 負の無限大に向かって最初の整数に丸めます。

  3. Math.Ceiling()- 正の無限大に向かって最初の整数に丸めます。

  4. Math.Truncate()- ゼロに向かって最初の整数に丸めます。

Floorまたはのいずれかが必要だと思いますTruncate。どちらも正数を切り捨てますが、Truncate-3.6 を -3 にFloor丸め、-4 に丸めます。

へのキャストintは切り捨てと同じことを行うので、必要に応じてそれを使用できます。

于 2012-07-26T12:42:11.093 に答える
4

Math.Floor :

whole = (int)Math.Floor(decimal / 1.5);
于 2012-07-26T12:29:35.830 に答える
2

にキャストdoubleするintと、答えは 59 ではなく、58 になります。 にキャストdoubleすると、値は0 に向かってint丸められます。したがって、これで十分です。

int whole = 0;
double x = 88.00;
whole = (int)(x / 1.5); // whole will be 58
于 2012-07-26T12:38:48.350 に答える
1

最後の整数に丸める場合はMath.Floorを使用し、次の整数に丸める場合はMath.Ceilingを使用します。

于 2012-07-26T12:29:08.690 に答える
0

これにより、 double 値が次のように変換されintます。

whole = (int)(decimal / 1.5);

また、使用することができますMath.Floor(doubleValue)

于 2012-07-26T12:32:02.673 に答える