2017-03-21 7 views
2

特定のロジックに小数点以下の値を書式設定する必要があります。入力値を常に5または9のいずれかに丸めたいのですが、どうすれば最も簡単な方法を実現できますか?既に関数がありますか?以下に私が到達しようとしている事例を見つける。左側にはいくつかの入力値があり、右側には達成したい出力があります。そうする簡単な方法はありますか?5または9のいずれかの値を丸める

Input  Formatted 
------  ---------- 
614,46  = 615,00 
614,57  = 615,00 
615,01  = 619,00 
616,57  = 619,00 
91,11  = 95,00 
96,11  = 99,00 
89,25  = 95,00 
+0

[これはまったく役に立ちますか?](http://stackoverflow.com/questions/326476/how-to-round-a-number-in-vba-to-the-nearest-5-or-10 - または - x) –

答えて

1

私が正しく理解していれば、あなたが戻っへのより大きいまたは指定した数に等しい最小の整数をCeiling方法を使用する必要がありますし、この整数ラウンド最寄り5または9

に私はしないでください独自の機能を記述することなく、この動作を得ることができると思います。

Private Function intRoundTo5Or9(ByVal dblNumber As Double) As Integer 

    Dim intLastDigit As Integer = CInt(Math.Ceiling(dblNumber).ToString().Substring(Math.Ceiling(dblNumber).ToString().Length - 1, 1)) 

    If intLastDigit <= 5 Then 
     Return Math.Ceiling(dblNumber) + 5 - intLastDigit 
    Else 
     Return Math.Ceiling(dblNumber) + 9 - intLastDigit 
    End If 

End Function 
+0

私はちょうどあなたの倍数を小数に置き換えることができますか?私は小数に取り組んでいるので。 –

+1

@トニー前の答えの私のコメントを参照してください。 –

2

は何もありませんあなたのケースのためで建てるいますが、簡単に自分でそれを実装することができます

Public Sub Main() 
    Console.WriteLine("{0:N2}", myFlor(614.46)) 
    Console.WriteLine("{0:N2}", myFlor(614.57)) 
    Console.WriteLine("{0:N2}", myFlor(615.01)) 
    Console.WriteLine("{0:N2}", myFlor(616.57)) 
    Console.WriteLine("{0:N2}", myFlor(91.11)) 
    Console.WriteLine("{0:N2}", myFlor(96.11)) 
    Console.WriteLine("{0:N2}", myFlor(89.25)) 
End Sub 

Function myFlor(ByVal value As Double) As Double 
    Dim base as Integer 
    base = Math.Truncate(value/10) *10 
    If value - base > 9 
     ' Handle 9.01 -9.99 case 
     Return base + 15 
    ElseIf value - base > 5 
     Return base + 9 
    Else 
     Return base + 5 
    End If 
End Function 
+0

こんにちは、私は小数点以下2桁を使用して、私はちょうど小数点にすべてのダブルタイプを置き換えることができますそれは動作しますか? –

+1

@Tony 'Option Strict On'を指定すると、値を暗黙的に変換する際にエラーが発生します。したがって、Decimalに変更することは良い考えであり、結果に大きな影響を与えることはありません。 [数値データ型](https://msdn.microsoft.com/en-us/library/ae55hdtk.aspx)を参照してください。 –

+0

@AlexM。私はちょうどこのコードを取って、DoubleをDecimalに変更します。なぜ完全に異なるタイプを言っているのかは分かりません。 –

関連する問題