Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Int() / 18 сообщений из 18, страница 1 из 1
10.03.2004, 15:54
    #32436559
Евгений.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Друзья!
А кто знает, почему у меня
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int( 2 , 115  *  1000 ) =  2115 

работает правильно, а вот 

int( 1 , 115  *  1000 ) =  1114 

вместо  1115  ?
...
Рейтинг: 0 / 0
10.03.2004, 15:57
    #32436563
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Потому что 1.115 хранится приблизительно как 1.114999999999999...
...
Рейтинг: 0 / 0
10.03.2004, 16:06
    #32436582
frverfgverg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Да здравствует явное преобразование типов!

? int(ССur(2.115) * 1000)
...
Рейтинг: 0 / 0
10.03.2004, 16:11
    #32436594
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
А зачем вообще так использовать int? Оно всегда будет округлять вниз, даже если дробная часть больше, чем 0.9. Если уж округлять, то не вниз, а к ближайшему целому.

int(1.115 * 1000 + 0.5) = 1115
...
Рейтинг: 0 / 0
10.03.2004, 16:18
    #32436609
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Если уж округлять, то не вниз, а к ближайшему целому
Нет уж, Саныч, компромис - не для нас!
Никаких полумер! Никаких "ближайших целых"!
Только вверх, к большему целому!
На меньшее я не согласен!

кому куда надо по условиям задачи - тот пусть туда и округляет
...
Рейтинг: 0 / 0
10.03.2004, 17:04
    #32436691
Евгений.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Владимир Саныч
Потому что 1.115 хранится приблизительно как 1.114999999999999...

А как с этим бороться?

Владимир Саныч
Если уж округлять, то не вниз, а к ближайшему целому.

По задаче нужно всегда вниз.

frverfgverg
Да здравствует явное преобразование типов!
? int(ССur(2.115) * 1000)

А как же
Код: plaintext
1.
Int(CCur( 1 . 11115 ) *  100000 )

дает 111120, а надо 111115 ?
...
Рейтинг: 0 / 0
10.03.2004, 17:22
    #32436730
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
СанычПотому что 1.115 хранится приблизительно как 1.114999999999999...
А 2.115 как хранится? Разве не как 2.114999999999999?
...
Рейтинг: 0 / 0
10.03.2004, 17:22
    #32436733
frverfgverg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
А как же \r
Int(CCur(1.11115) * 100000)\r
дает 111120, а надо 111115 ?\r
\r
денежный тип хранит до 4-х знаков после запятой, поэтому VBA приходится сперва округлить, т.е. фактически получается Int(CCur(1.1112) * 100000)\r
\r
З.Ы. посмотри здесь про округление
...
Рейтинг: 0 / 0
10.03.2004, 17:31
    #32436749
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
авторА как с этим бороться?
Изобретать комп, который работает по десятичной системе счисления.
...
Рейтинг: 0 / 0
10.03.2004, 17:33
    #32436752
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
ТемныйА 2.115 как хранится? Разве не как 2.114999999999999?
А вот, видимо, нет. А, скажем, как 2.115000000000000001.
...
Рейтинг: 0 / 0
10.03.2004, 17:58
    #32436798
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
для борьбы - cdec
int(cdec((1,115) * 1000)

по поводу "меньшего" - int - это оно и есть - строго к меньшему по значению, т.е. int(-1,5)=-2.
...
Рейтинг: 0 / 0
10.03.2004, 17:59
    #32436800
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
пускай он как хочет хранит, результат должен быть правильный и соответствовать описанию функции....

это какая то лажа с INT конкретно

а все объяснения что в двоичном виде число такое -то выглядит так и это приблезительно 1.114999999999999 - объяснения причины бага
...
Рейтинг: 0 / 0
10.03.2004, 18:05
    #32436814
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
АлексейКрезультат должен быть правильный и соответствовать описанию функции
И запретить компьютерам пользоваться двоичной системой для промежуточных результатов!
...
Рейтинг: 0 / 0
10.03.2004, 18:08
    #32436815
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
зачем запрещать? пусть хоть на пальцах считает или числа как стринги хранит и считает в столбик ))
...
Рейтинг: 0 / 0
10.03.2004, 18:10
    #32436818
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
для АлексейК - Владимир Саныч ШИБКО прав. Эта песня поется двумя куплетами:
Преобразования неявные используются на всех (2x) этапах от вычисления выражения внутри Int, до возврата значения. снаружи - Int (в соответсвии с документацией) возвращает на самом деле double c "зануленной" дробной частью. Теперь внутри - 2.115 как и 1.115 по умолчанию - double, 1000 - int при вычислении 1000 приводится к "большему" типу double, дальше перемножаются doubl-ы и от результата ОТБРАСЫВАЕТСЯ дробная часть.

Поэтому рассуждения про "как хранится" (вычисляется) - это не описание бага - а просто пилюля. ее надо принять.
...
Рейтинг: 0 / 0
10.03.2004, 18:13
    #32436820
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Предлагаю компромисс. Дадим возможность программисту решать, хочет ли он по двоичной системе или "медленно, но верно".
...
Рейтинг: 0 / 0
10.03.2004, 18:14
    #32436822
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Dim thousand As Currency
thousand = 1000
Dim myval As Double
myval = 1.115
Debug.Print Int(myval * thousand) ' 1114

Dim thousand As Currency
thousand = 1000
Dim myval As Currency
myval = 1.115
Debug.Print Int(myval * thousand) ' 1115
...
Рейтинг: 0 / 0
10.03.2004, 19:55
    #32436958
Евгений.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Int()
Благодарю Victosha за
Код: plaintext
CDec()
и за понимание... видимо глубокое понимание разницы типов.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Int() / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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