|
|
|
Int()
|
|||
|---|---|---|---|
|
#18+
Друзья! А кто знает, почему у меня Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 15:54 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
Потому что 1.115 хранится приблизительно как 1.114999999999999... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 15:57 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
Да здравствует явное преобразование типов! ? int(ССur(2.115) * 1000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 16:06 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
А зачем вообще так использовать int? Оно всегда будет округлять вниз, даже если дробная часть больше, чем 0.9. Если уж округлять, то не вниз, а к ближайшему целому. int(1.115 * 1000 + 0.5) = 1115 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 16:11 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
Если уж округлять, то не вниз, а к ближайшему целому Нет уж, Саныч, компромис - не для нас! Никаких полумер! Никаких "ближайших целых"! Только вверх, к большему целому! На меньшее я не согласен! кому куда надо по условиям задачи - тот пусть туда и округляет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 16:18 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч Потому что 1.115 хранится приблизительно как 1.114999999999999... А как с этим бороться? Владимир Саныч Если уж округлять, то не вниз, а к ближайшему целому. По задаче нужно всегда вниз. frverfgverg Да здравствует явное преобразование типов! ? int(ССur(2.115) * 1000) А как же Код: plaintext 1. дает 111120, а надо 111115 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:04 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
СанычПотому что 1.115 хранится приблизительно как 1.114999999999999... А 2.115 как хранится? Разве не как 2.114999999999999? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:22 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
А как же \r Int(CCur(1.11115) * 100000)\r дает 111120, а надо 111115 ?\r \r денежный тип хранит до 4-х знаков после запятой, поэтому VBA приходится сперва округлить, т.е. фактически получается Int(CCur(1.1112) * 100000)\r \r З.Ы. посмотри здесь про округление ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:22 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
авторА как с этим бороться? Изобретать комп, который работает по десятичной системе счисления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:31 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
ТемныйА 2.115 как хранится? Разве не как 2.114999999999999? А вот, видимо, нет. А, скажем, как 2.115000000000000001. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:33 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
для борьбы - cdec int(cdec((1,115) * 1000) по поводу "меньшего" - int - это оно и есть - строго к меньшему по значению, т.е. int(-1,5)=-2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:58 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
пускай он как хочет хранит, результат должен быть правильный и соответствовать описанию функции.... это какая то лажа с INT конкретно а все объяснения что в двоичном виде число такое -то выглядит так и это приблезительно 1.114999999999999 - объяснения причины бага ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 17:59 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
АлексейКрезультат должен быть правильный и соответствовать описанию функции И запретить компьютерам пользоваться двоичной системой для промежуточных результатов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 18:05 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
зачем запрещать? пусть хоть на пальцах считает или числа как стринги хранит и считает в столбик )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 18:08 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
для АлексейК - Владимир Саныч ШИБКО прав. Эта песня поется двумя куплетами: Преобразования неявные используются на всех (2x) этапах от вычисления выражения внутри Int, до возврата значения. снаружи - Int (в соответсвии с документацией) возвращает на самом деле double c "зануленной" дробной частью. Теперь внутри - 2.115 как и 1.115 по умолчанию - double, 1000 - int при вычислении 1000 приводится к "большему" типу double, дальше перемножаются doubl-ы и от результата ОТБРАСЫВАЕТСЯ дробная часть. Поэтому рассуждения про "как хранится" (вычисляется) - это не описание бага - а просто пилюля. ее надо принять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 18:10 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
Предлагаю компромисс. Дадим возможность программисту решать, хочет ли он по двоичной системе или "медленно, но верно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 18:13 |
|
||
|
Int()
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 18:14 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32436798&tid=1676183]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
405ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 736ms |

| 0 / 0 |
