Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы с округлением / 15 сообщений из 15, страница 1 из 1
08.07.2004, 10:11:25
    #32594690
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Такой вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim rstCurr  As New ADODB.Recordset
Dim sngSum As Single

 ' Здесь некий код. 
 
 ' Далее:
 

sngSum = rstCurr("sum_price")

Так вот, если скажем rstCurr("sum_price") = 1996685,79, то sngSum принимает значение 1996686. И что это за финт, ведь sngSum объявлена как Single. Т.е. точности должно хватить. И что интересно, если ее определить, как Double, то проблема решается. Кто нибудь сталкивался с подобным? Теперь я уже сомневаюсь во всем коде, где использовал Single, может для верности сделать замену?
...
Рейтинг: 0 / 0
08.07.2004, 10:43:59
    #32594789
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Вот именно что не хватает тебе точности
...
Рейтинг: 0 / 0
08.07.2004, 11:08:30
    #32594863
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Попробуй Double - у него точность поболе
...
Рейтинг: 0 / 0
08.07.2004, 11:43:28
    #32594986
Roma R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Если тип поля Денежный логичнее использовать и переменную денежного типа
...
Рейтинг: 0 / 0
08.07.2004, 11:48:45
    #32595007
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Roma RЕсли тип поля Денежный логичнее использовать и переменную денежного типа
Разумно - и, вообще, денежный тип менее подвержен ошибкам округления (ибо является почти целочисленным)
PS: Просто не сопоставил название поля с типом переменной- бывает
...
Рейтинг: 0 / 0
08.07.2004, 15:26:24
    #32595742
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
SharkВот именно что не хватает тебе точности

Гм, все это странно, хотя может я чего не догоняю. В хэлпе:

HelpSingle (single-precision floating-point) variables are stored as IEEE 32-bit (4-byte) floating-point numbers, ranging in value from -3.402823E38 to -1.401298E-45 for negative values and from 1.401298E-45 to 3.402823E38 for positive values

Ведь 1996685,79 много меньше 3.402823E38. Или тут с увеличением абсолютного значения числа уменьшается допустимое число знаков после запятной? Т.е. в сингле, числа больше 3402823.0 можно хранить только целые?

Если это действительно так, то, признаюсь, для меня это открытие :). Примерно такое же, что и тип Int имеет длину 2 байта а не четыре... я уже научился не использовать тип Int, теперь придется забыть и Single :)
...
Рейтинг: 0 / 0
08.07.2004, 15:33:59
    #32595761
йцук
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
авторИли тут с увеличением абсолютного значения числа уменьшается допустимое число знаков после запятной
А ты как хотел? 38 знаков слева от запятой и 45 знаков справа? И как бы ты это запихивал в 32 бита (размер single)?
...
Рейтинг: 0 / 0
08.07.2004, 15:42:13
    #32595787
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
мдя...
как много еще открытий, судя по всему, впереди.
Жизнь увлекательна и удивительна...

конечно, книжицу бы каку прочесть не мешало, но с "открытиями" - не в пример веселее...

точность числового представления для Single - 7-8 десятичных знаков
для double - ~16

Код: plaintext
я уже научился не использовать тип Int
То есть - когда-то раньше - умел...

VB/VBA - это ОЧЕНЬ хороший язычок, он, при определенном подходе, позволяет и переменные не объявлять, тем самым, как-бы никакой специальный тип не использовать.
Хорошо это потому, что позволяет код шкрябать не беспокоясь - надо ли думать о том, чего не знаю, или не надо.
Вот тебе совет - научись ВООБЩЕ не использовать типы.
...
Рейтинг: 0 / 0
08.07.2004, 15:47:12
    #32595815
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
авторя уже научился не использовать тип Int
Зря - целочисленный типы, более предсказуемы и у них всегда известна точность :)
А у типов с плавующей (стоит обратить внимание) точкой всегда есть шанс, что точности не хватит :)

ЗЫ: Money - это целочисленный тип (в некотором роде :) )
...
Рейтинг: 0 / 0
08.07.2004, 15:56:53
    #32595855
йцук
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Эй, вы чего?
Я вот тоже Int не использую. И сильно матерюсь когда в старом коде встречаю.
Мне как-то Long больше по душе :)
...
Рейтинг: 0 / 0
08.07.2004, 16:07:02
    #32595882
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
авторЭй, вы чего?
Я вот тоже Int не использую.

Какая же в этом доблесть такая специальная? Этому компания Microsoft в своих Gettingg Starting обучает.

Речь о другом - о том, что не использовать то, использование чего ты не понимаешь - это скорее хорошо, чем плохо.
А степень понимания из контекста изложения вопроса вычитывается единственным способом, без возможности иного толкования.
...
Рейтинг: 0 / 0
08.07.2004, 16:10:49
    #32595890
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
VictoshaРечь о другом - о том, что не использовать то, использование чего ты не понимаешь - это скорее хорошо, чем плохо.
Мне теперь перестать пользоваться компьютером и автомобилем?
...
Рейтинг: 0 / 0
08.07.2004, 16:16:29
    #32595905
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
йцукА ты как хотел? 38 знаков слева от запятой и 45 знаков справа?
Признаюсь, хотел. Но в срочном порядке закатываю губы обратно.

paparomeЗря - целочисленный типы, более предсказуемы и у них всегда известна точность
Я имел ввиду, что лучше использовать Long, потому что он длиннее :) При работе с таблицами с большим количеством строк есть шанс нарваться на значение ключа, больше максимально допустимого для Int, а это всего 32 тыщи. К тому же на 32-разрядных машинах использование Int вместо Long не приведет к увеличению скорости вычислений. Поэтому, думаю о нем можно забыть, как о пережитке прошлого.

Victoshaкак много еще открытий, судя по всему, впереди
Вот тут ты прав. Access для меня - страна неизведанных чудес и волшебства :)
...
Рейтинг: 0 / 0
08.07.2004, 16:17:15
    #32595907
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Владимир Саныч VictoshaРечь о другом - о том, что не использовать то, использование чего ты не понимаешь - это скорее хорошо, чем плохо.
Мне теперь перестать пользоваться компьютером и автомобилем?
Саныч, начни с малого :)
Перестань пользоваться форумом :)
...
Рейтинг: 0 / 0
08.07.2004, 16:19:17
    #32595914
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с округлением
Владимир Саныч VictoshaРечь о другом - о том, что не использовать то, использование чего ты не понимаешь - это скорее хорошо, чем плохо.
Мне теперь перестать пользоваться компьютером и автомобилем?

я человек злобный. при этом не советчик, а, скорее, высказыватель "мнения".
Хожу - бурчу себе под нос.
Получаются ругательства.
Люди оборачиваются и крутят пальцем у виска.
Следует ли из этого, что я им присоветовал пальцем у виска крутить?

По существу вопроса
1) Это должно быть ТВОЕ решение.
2) У меня есть подозрение, что происходит подмена понятий.

-------------
3) Рад, что модераторы - на месте - все хорошо. В общем, я почти вернулся. Скоро стану здоровее - может - подобрею...

ЗЫ
Нежный я всегда - это у меня структура кожи такая, а про то, что ласковый - пока никому ничего не обещал...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы с округлением / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]