Округление числа вниз в Visual Basic - PullRequest
7 голосов
/ 04 августа 2009

У меня есть приложение Visual Basic, которому нужно округлить число, например, 2,555 станет 2,55, а не 2,26.

Я могу сделать это, используя функцию для удаления символов больше 2 с десятичной точки, используя это:

Dim TheString As String
TheString = 2.556
Dim thelength = Len(TheString)
Dim thedecimal = InStr(TheString, ".", CompareMethod.Text)
Dim Characters = thelength - (thelength - thedecimal - 2)
_2DPRoundedDown = Left(TheString, Characters)

Есть ли лучшая функция для этого?

Ответы [ 5 ]

11 голосов
/ 04 августа 2009

Вы можете сделать это с Math.Floor . Однако вам нужно умножить * 100 и разделить, поскольку вы не можете указать количество цифр

Dim theNumber as Double
theNumber = 2.556
Dim theRounded = Math.Sign(theNumber) * Math.Floor(Math.Abs(theNumber) * 100) / 100.0
3 голосов
/ 04 августа 2009

Другой способ сделать это, не основанный на использовании типа String:

Dim numberToRound As Decimal
Dim truncatedResult As Decimal
numberToRound = 2.556
truncatedResult = (Fix(numberToRound*100))/100
2 голосов
/ 04 августа 2009

Ответ Math.Floor () хорош. Я не уверен точно, в каких средах VB Fix () определен. Как указывает Джастин, Math.Floor () не будет работать с отрицательными числами. Вам нужно взять абсолютное значение, а затем умножить на SGN () числа. Я не знаю точного названия функции, которую вы использовали бы для получения SiGN (не sin ()) числа.

В псевдокоде с учетом отрицательных значений результат будет выглядеть следующим образом:

result = sgn( num ) * floor( abs( num * RoundToDig ) ) / RoundToDig

- Пушистых коров мычим и распаковываем.

1 голос
/ 06 июня 2013

округлить вниз

Math.Floor(number)

Для обрезки символов

number.Substring(0,1)

Вы можете преобразовать его в строку.

0 голосов
/ 09 августа 2016
Dim Input As Decimal
Dim Output As Decimal
Input = 2.556
Output = Input - (Input Mod 0.01)

Это будет работать как с положительными, так и с отрицательными числами

...