| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Trunc его глюки и борьба с ними. |
| Автор: ivan219 1.10.2007, 11:47 | ||||
На выходе имеем 011 хотя должно быть 021 если сделать так:
то получается правильно т.е. 031 вобщем так как и долно быть, такиеже глюки наблюдаются и с другими числами 4, 7, 9 на выходе получаем на 1 меньше. Возможноли это обойти без перевода в String и дольнейшего разбота строки т.е. напрямую работать с числами??? |
| Автор: Coder 1.10.2007, 12:06 | ||
если я правильно понял, то:
|
| Автор: skyboy 1.10.2007, 12:11 | ||
| это не глюки, это особенности. и не у trunc, а у представления вещественных чисел. то, что real(some - trunc(some)) * 10 выводится как "2", это не значит, что там реально хранится 2. Просто число, достаточно близкое к 2(1,999999999). И при выводе видим 2, а при обработке воспринимаем как "1,999999999". Соотвественно, trunc, которое просто отбросит дробную часть, получит 1, а не "2". Т.е. у меня в Delphi 7
Первые два вернут "2"(видимо, сказывает оптимизация), а третие вернет "1". В принципе, то же, что и в твоем коде, но только можно увидеть, что при работе с константами отклонений не наблюдается. |
| Автор: ivan219 1.10.2007, 12:23 |
| Печально ну почти в идеале мне ндо чтобы на выходе было 4 переменных Integer переменую S я ввёл для вас так как мой код отличается. Я банально хотел избавится от лишний преобразований Real -> String -> [1..4] Integer но видать не удастся Всем спасибо!!! |
| Автор: stab 1.10.2007, 13:22 |
| ivan219, долго смотрел на код.. что он делает? |
| Автор: Alexeis 1.10.2007, 15:04 |
| ivan219, случайно не переписываешь функцию RoundTo для округления к десяткам, сотым? |
| Автор: skyboy 1.10.2007, 15:07 | ||
смотрим "правильные" тестовые данные:
т.е. происходит реверс строки с впередиидущем нулем |
| Автор: ivan219 1.10.2007, 15:25 | ||
| Я же написал: А мой код если интересно вот:
Работает так как надо TSevenSegment это мой компонент семисегментного индикатора |