2016-07-13 4 views
-1

私はvb.netで適切な数学的な丸めを行うための組み込み関数を持っていますか?例えば、両方の機能リターン14.00以下vb.netの数学的な丸め?

が、彼らは14.01を返す必要があります:

Math.Round(14.004999, 2, MidpointRounding.AwayFromZero) 
Decimal.Round(14.004999, 2, MidpointRounding.AwayFromZero) 

は、適切な数学的丸めを行う他の方法がありますか?

+4

答えが.01で終わると思われるのはなぜですか? 2つの小数点以下を四捨五入し、3番目の小数点以下を4にします。 – dbasnett

+1

'AwayFromZero'のために常に丸められることを期待している場合は、enumの名前に注意してください--MempointRounding'は厳密に中途半端 - 丸めが正常に行われない場合は –

+0

いつも丸められるとは思わない。 しかし、私はその数字がアカウントに取り込まれることを期待しています。 14.004999 - > 14.005 - > 14.01 私は自分自身を少しクリアしたいと思っています:) – ak7483

答えて

1

これは何をしたい

Dim somedata As Double = 14.004999 
Dim outd As Double 

outd = Math.Round(somedata, 3) 
outd = Math.Round(outd, 2, MidpointRounding.AwayFromZero) 
-2

望ましい結果が得られますが、...だろうが、天井で丸めません。

Dim d As Decimal = 14.004999 
Dim r As Decimal = Math.Ceiling(d * 100D)/100D 
+1

''適切な数学的丸め '**は天井を使っていません。天井は常に丸められ、適切な数学的な丸めは、例えば、「0.5→1」および「0.4→0」である。 _5 **を含む**以上のものは四捨五入されますが、** 5。**未満のものは四捨五入されます._ –

+0

私が間違っている場合は訂正してください:14.004999は14.01に丸めてください.0049 .005以下であるため、0に丸められ、14.00を受信します.14.01にするには、丸めをするだけです。どこが間違っているの? – Megas

+0

いいえ、私はそれを言ったことはありません。 「0.5」は「1」に、「0.4」は「0」に丸められるべきだと私は言った。彼が望む丸めのタイプの2つの例でした。しかし、天井は常に丸められます。つまり、彼の入力が動的であれば、このトリックは実行されません。 –

0

計算に1/2セントを追加します。

Dim x As Decimal = 14.004999D 

Dim y as Decimal = Decimal.Round(x + 0.005D, 2, System.MidpointRounding.AwayFromZero) 

は、金融数学でDecimalタイプとないDoubleタイプを使用してください。