- - PR -
[C#]普通の四捨五入をするには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-04-23 16:35
System.Math.Round は丸める桁が 5 だったら偶数になるように丸めますが、
普通に四捨五入してくれるメソッドはないのでしょうか? それとも自前で何とかするしかないのでしょうか? ちなみに、Double型の数値を小数点以下第2位で四捨五入しようとしています。 | ||||
|
投稿日時: 2003-04-23 22:08
「自前で」と言っても0.5を足してFloorとればいいだけですけどね^^
| ||||
|
投稿日時: 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; とかですね。 | ||||
|
投稿日時: 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; } | ||||
|
投稿日時: 2003-04-25 17:32
それがISOで定められた「規定」だそうです。。。 えっと、四捨五入では、1〜4が小、5〜9が大の方向へ丸められます。ここで数字の数を数えると・・・小さくなるのは4つ、大きくなるのは5つあることがわかります。つまり、四捨五入を行うと大きい方へ丸められ、丸めた数の合計が元の値を超える場合があるのです。 そこでISO(とJIS)で丸める方法が規定されました。詳しくはこちらのページを見てください。 |
1