|
|
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Саныч >Виктор, если сделать 0.49, то весь интервал от 0.49 до 0.5 будет обрабатываться неправильно. Почему же? Все работает нормально. Ты алгоритм посмотри varTemp = CDec(Number) * dblPower + 0.5 (0,49) а потом Int(varTemp) >Возьми как пример не 1.75, а 1.494. Беру ? okrug(1.494,2) При 0,49 - 1,49 При 0,499999 - 1,49 При 0,50 - 1,49 Все правильно. Беру ? okrug(1.494,1) При 0,49 - 1,5 При 0,499999 - 1,5 При 0,50 - 1,5 Все правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:34 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
ТОЧНО!!! Саныч - РЕСПЕКТ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:35 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, а если поставить в программе не 0.49, а 0.3 или 0.8? Может, оно вообще ни на что не влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:41 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
>а если поставить в программе не 0.49, а 0.3 или 0.8? Может, оно вообще ни на что не влияет? Оно нужно только как некое правило округления чисел, оканчивающихся на 5. Кто считает что ему нужно вменьшую сторону - ставит ,049 Кто считает что ему нужно в большую - ставит - 0,5 Кто считает что ему надо по "правилам" - использут Round, правда тогда надо забыть о таком округлении Round (9999,-1)=10000 Вообще в том топике про округление проскаивала мысль сделать универсальную функцию, передавая в параметрах правило округления (или использовать глобальные натсройки программы). Это будет самый правильный подход. По-умолчанию сделать использование Round - и как самой быстрой и так самой "правильной". Но не забыть про консультироваться по правилам округления у бухгалтера - и лучше письмено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:48 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
> Оно нужно только как некое правило округления чисел, оканчивающихся на 5. Когда оно сидит в программе, оно не знает, для чего оно нужно. Там нет ифа "если кончается на 5". Через эту строку программы проходят все числа. Поэтому я и предлагаю проверить, как программа будет работать (с разными числами), если заменить 0.49 на другое число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:56 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Поправлю сам себя (не по сути, а по примеру). Неправильно обрабатывается интервал от 0.5 до 0.51. Короче, надо попробовать взять эту функцию от 0.505, и сразу будет видно, что 0.49 - это баг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 15:42 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Я что-то сегодня туплю... Где баг, Саныч ? okrug(0.505,1) при +0,49/+0,5 вернет 0,5 - что правильно. 0,505 - (0,50/0,51) - 0,5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 15:56 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Здорово Я здесь прописался недавно. Может я и опоздал со своими советами. Простейший способ округлить до 2х знаков после запятой: Результат = CCur(Format(Выражение, "0.00")) , но работает эта конструкция довольно медленно, вот пара вариантов побыстрее. Public Function Okrug(s As Variant, Optional m As Byte = 2) As Double 'Округляет аргумент от 0 до m знаков после запятой ' при возникновении ошибки возвращает НОЛЬ On Error GoTo OkrugErr Dim n As Long, d As String d = String(m, "0") n = Val("1" & d) If s * n - Int(s * n) < 0.5 Then Okrug = Int(s * n) / n Else Okrug = (Int(s * n) + 1) / n End If Exit Function OkrugErr: 'Метка обработчика ошибок Okrug = 0 Err.Clear End Function а вот вариант округления только до ДВУХ знаков - зато работает в трое быстрее Public Function RoundTwo(s As Variant) As Currency 'Округлят аргумент до двух знаков после запятой ' при возникновении ошибки возвращает НОЛЬ Dim x As Long On Error GoTo RoundTwoErr x = Int(s * 100) If s * 100 - x < 0.5 Then RoundTwo = CCur(x / 100) Else RoundTwo = CCur((x + 1) / 100) End If Exit Function RoundTwoErr: 'Метка обработчика ошибок RoundTwo = 0 Err.Clear End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:08 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Predator Переименуйся в Plagiator. если конечно ты не Сергей Оркин. http://msa.polarcom.ru/st/d_1000502.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:12 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Немерянная круть Я всегда чуть не плачу когда вижу, как люди домножают что-то на степени 10 следующим образом. Код: plaintext 1. 2. Круче этого только Код: plaintext Честное слово, я это не сам придумал. В исходниках драйвера к кассовому аппарату видел Код: plaintext Видимо на 100 делили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:15 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Лоху >chislo = chislo & "e-2" Это ты нам уже постил :) Ты по делу скажи - где в приведенной мной (02 июля 17:54) функции баг? Саныч не откликается - выдохся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:20 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Ну получай Код: plaintext 1. А должно быть 2 Саныч так и написал Неправильно обрабатывается интервал от 0.5 до 0.51 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:28 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Predator Ты не обижайся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:28 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Лоху >? okrug(1.509,0)=1 >А должно быть 2 все - нашел -понял -спасибо тебе и Санычу. Если использовать вместо 0,49 -> 0.499999999999999 то будет все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:38 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Не будет Код: plaintext 1. А должно быть 1е-15 P.S. И не говори что я зануда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:46 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
т.е. наоборот будет 1е-15, а должно быть 2е-15 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:50 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Какой хитрый :) Тогда так (вместо 0,4999999) varTemp = CDec(Number) * dblPower + CDec(0.5 - 1E-308) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:08 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Думаешь будет работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:22 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Будет и для ? okrug(1.509e-28,28) Но не больше/меньше 28 знаков тогда делаем varTemp = CDec(Number) * dblPower + CDec(0.5 - 1E-29) Кстати. Round работает только до 22 знаков ? round(1.509e-22,22) т.е. самопальная функция круче в 1 000 000 раз :) З,Ы. Во ху%ня получилась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:38 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Лоху спасибо за поддержку и за энергию, потраченную вместо меня. Я тебе должен много енотов. Слушай, меняй ник. Виктору: я не выдохся, я сегодня в отпуске, а дома Интернет платный. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:40 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Ну, а если сделать varTemp = CDbl(Number) * dblPower + CDbl(0.5 - 1E-308) то можно и с точностью до 308 знака :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:52 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
А кто возьмется это всё по округлению преобразоватьв FAQ? уже 2 топика посвятили этому.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 09:16 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Только этот фак надо не в раздел "Аксесс", а в раздел "здравый смысл" или "математика за 1 класс". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 14:14 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Саныч\r \r >а в раздел "здравый смысл" или "математика за 1 класс".\r \r Не знаю как у вас, у нас налоговый инспектор может и не знать о правилах округления и из-за расхождения в несколько копеек развернуть бухгалтера назад или штрафануть (им тоже план выполнять надо). В некоторых отчетах требуется "округлени" путем отбрасывания дробной части (1 руб 99к = 1 руб)\r В главном топике это расписывалось. \r Вывод можно сделать один: дать бухгалтеру самому определять правила округления. \r ======\r "Умом Россию не понять..." (с) кто-то умный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 14:23 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32198734&tid=1680722]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 406ms |

| 0 / 0 |
