Десятичные числа в Visual Basic 6.0 - PullRequest
0 голосов
/ 18 февраля 2009

Мне нужно отобразить 45.556 как 45.55. Какой формат мне нужно использовать в настоящем dbgrid pro 7.0.

Ответы [ 5 ]

6 голосов
/ 18 февраля 2009

Извините, не знаком с dbgird pro 7.0. Если вы не хотите перегружать 6, как вы показали в своем примере (округлено 45,556 - 45,56), вы можете использовать команду форматирования, которая отформатирует ваше число до двух десятичных разрядов, округляя соответственно.

format(*value*, "0.00")

Использование "0,00" форматирует число по умолчанию в ноль в позиции, в которой находится ноль.
Использование "#. ##" форматирует число по умолчанию в пробел (ничего)

Если вы не хотите округлять число и хотите получить только число плюс два правильных десятичных знака.

Left(cStr(value), instr(cStr(value), ".") + 2))

Получает слева ваш номер плюс 2 после десятичной дроби, обрезая остальные. Вам может не понадобиться cStr (), так как VB может явно преобразовать его первым.
использование cStr () может создать пробел до того, как число из знака минус пошло бы, format () не делает этого, если вы видите эту проблему в вашей сетке.

1 голос
/ 01 октября 2015

На самом деле вы можете сделать это двумя разными способами с разными результатами. Мы возьмем первые две цифры после символа точки "." чтобы получить результат: 45,55 из 45,556

Dim a As Double  'This must be DOUBLE not long
a = 45.556

MsgBox Left(a, InStr(a, ".") + 2) 'Result: 45.55

Программно верно на 100%, но логически приведенный выше результат НЕПРАВИЛЬНО должен составлять 45,556, потому что последняя цифра, от которой мы хотим избавиться, больше 5 из 10, то есть 6, поэтому мы должны добавить 1 к предыдущему числу от 5 до 6, чтобы получить результат: 45,56. Это не я. Другой способ даст нам правильный результат с необходимой длиной цифры:

Dim a As Double 'This must be DOUBLE not long
a = 45.556

MsgBox Format(a, "#.##") 'Result: 45.56

Перед "." достаточно использовать один #, но после "." мы добавляем # как количество цифр, которое нам нужно отобразить.

1 голос
/ 18 февраля 2009

Опционально, не приводя к манипуляциям со строками, которые взорвутся в европейских странах (в которых вместо десятичного знака используется вместо.) ... Однако, если любая комбинация floatval и decimalPlaces> 9 у вас будет переполнение вопросы ...

Public Function Floor(ByVal floatval As Double, optional decimalPlaces as Long = 0) As Long
    Dim intval As Long
    intval = Round(floatval)
    If intval > floatval Then 
         intval = intval - 1
    End If

    if decimalPlaces > 0 then
        floatval = float / (10 ^ decimalPlaces)
    end if

    Floor = intval
End Function
1 голос
/ 18 февраля 2009

Чтобы справиться с этим через свойства сетки, установите для столбца NumberFormat = Fixed, если только это не значение валюты, тогда вам следует использовать Currency.

0 голосов
/ 23 ноября 2018

Вы можете использовать:

fix(45.556*100)/100

45,55

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...