- PR -

[C#]普通の四捨五入をするには?

1
投稿者投稿内容
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2003-04-23 16:35
System.Math.Round は丸める桁が 5 だったら偶数になるように丸めますが、
普通に四捨五入してくれるメソッドはないのでしょうか?

それとも自前で何とかするしかないのでしょうか?

ちなみに、Double型の数値を小数点以下第2位で四捨五入しようとしています。
あすかぜ
常連さん
会議室デビュー日: 2003/04/22
投稿数: 21
投稿日時: 2003-04-23 22:08
「自前で」と言っても0.5を足してFloorとればいいだけですけどね^^
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2003-04-24 08:44
zakeyさんこんにちは。

>System.Math.Round は丸める桁が 5 だったら偶数になるように丸めますが、
>普通に四捨五入してくれるメソッドはないのでしょうか?

ありません。

>ちなみに、Double型の数値を小数点以下第2位で四捨五入しようとしています。

Double d = 8.7654321;
d = Math.Floor(d*100 + 0.5)*0.01;

とかですね。
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2003-04-24 11:34
返答ありがとうございました。

やっぱりないのですね。

とりあえず、指定した精度に四捨五入する処理を作ってみました。
(例外処理は省略しています)

/// <summary>
/// 指定値を指定された精度の数値に四捨五入します。
/// </summary>
/// <param name="roundValue">指定値</param>
/// <param name="digits">精度(0 の場合は整数になる)</param>
/// <returns>指定された精度に四捨五入された数値</returns>
public double RoundOff(double roundValue,int digits)
{
double shift = Math.Pow(10,(double)digits);
return Math.Floor(roundValue * shift + 0.5) / shift;
}

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-25 17:32
引用:

zakeyさんの書き込み (2003-04-23 16:35) より:

System.Math.Round は丸める桁が 5 だったら偶数になるように丸めますが、
普通に四捨五入してくれるメソッドはないのでしょうか?


それがISOで定められた「規定」だそうです。。。

 えっと、四捨五入では、1〜4が小、5〜9が大の方向へ丸められます。ここで数字の数を数えると・・・小さくなるのは4つ、大きくなるのは5つあることがわかります。つまり、四捨五入を行うと大きい方へ丸められ、丸めた数の合計が元の値を超える場合があるのです。

 そこでISO(とJIS)で丸める方法が規定されました。詳しくはこちらのページを見てください。
1

スキルアップ/キャリアアップ(JOB@IT)