|
|
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Вот код: Код: plaintext 1. 2. После этого sum равен 26879. Использую BCB6. Столкнулся с этой проблемой в коде программы, но когда решил для проверки вынести этот код в отдельный тест, то все работает правильно. 8-( Почему так получается и как написать правильно, чтобы не искажались значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2005, 15:15 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Попробуйте double a = 12345.0; int i = trunc(a); дело в том, что вещественные числа хранятся нормализованными, в виде .12345E5 только дробь двоичная, а не десятичная и поэтому это число может отличаться от того, которое отображается на какую-нибудь дельту (очень маленькую). При присвоении целому оно обрезается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2005, 17:20 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Функцию trunc я вообще не нашел. Она кажется из паскаля. В стандартной библиотеке не нашлось вообще функции вычисления целой части. Есть только modf, но с ней получается тот же результат. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Самое смешное, что когда создаю новый проект, вставляю туда этот же код - все правильно считается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2005, 23:57 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Вот более точное описание происхождения ошибки. "Работает" везде. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 00:22 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
DenissioВот более точное описание происхождения ошибки. "Работает" везде. Ага... а кроме этого еще ВЕЗДЕ написано не использовать double для работы с целыми числами. Надо считать деньги - используй long int, пиши туда копейки а при вводе-выводе подставляй точку. И будет тебе щастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 00:38 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Когда присваиваешь целому нецелое, то прибавляй 0.5 int money = a - b + 0.5; Для отрицательных подумай сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 08:36 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
DenissioФункцию trunc я вообще не нашел. Она кажется из паскаля. В стандартной библиотеке не нашлось вообще функции вычисления целой части. Есть только modf, но с ней получается тот же результат. Не бывает у числа с плавающей точкой целой части. Поэтому и функции нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 10:43 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Идея с long int похоже самая подходящая. Но я решил проблему так, чтобы не переписывать чужой код: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 11:26 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Простите, floor - потолок - округление снизу и ceil - пол - сверху. ASSERT(2 != floor(2.9999999)); ASSERT(-3 != floor(-2.9999999)); ASSERT(3 != ceil(2.9999999)); ASSERT(-2 != ceil(-2.9999999)); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 17:19 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
floor тоже не помогает: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 18:37 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Denissiofloor тоже не помогает: Код: plaintext 1. 2. 3. 4. Тебе не это лечить надо, днк лечить надо. Никогда ты не получишь точно того целого, которое ожидаешь, на двух произвольных числах. Потому что числа в ЭВМ - двоичные, а не десятичные. Нужны десятичные числа -- используй ДЕСЯТИЧНЫЕ числа, а не двоичные (float, double). В С\С++ встроенных их нет, поэтому надо пользоваться библиотеками типа gnu mp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 19:45 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Denissiofloor тоже не помогает: Код: plaintext 1. 2. 3. 4. дарю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 19:45 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Можно ещё длиннее написать, но я попробовал вот это: Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 20:31 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
Denissiofloor тоже не помогает: Код: plaintext 1. 2. 3. 4. а так не пробовал? ;) Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 21:16 |
|
||
|
преобразование типов int, double
|
|||
|---|---|---|---|
|
#18+
кино "Office space" смотрел? там чувак такой-же как у тебя код преднамеренно написал и в бухгалтерскую программулину засунул. Я подозреваю, что-то тоже типа ( a - b ). Потом куча бабок у него на счету оказалась. Ту не для бухгалтерии пишешь? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 21:24 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2032712]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 408ms |

| 0 / 0 |
