![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
xapm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.5.2013 Репутация: нет Всего: нет |
Hi,
Вот возник достаточно простой вопрос, как дробнуй часть числа значения double или extended преобразовать в целое. например 0.75 в 75, тоесть понятно что 100*0.75 даст нужный результат но встаёт тогда вопрос а как узнать сколько знаков после запятой что бы подобрать множитель ? Самый простой вариант который приходит на ум это перевести в string и посчитать length-ом , но как-то это не кашерно выглядит. Должны же быть какие-то альтернативы в конце-то концов ![]() Или опять таки перевести в стрингу и отрезать '0.' , но это не то ... Это сообщение отредактировал(а) xapm - 16.6.2013, 06:49 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Перевести в string и взять второе слово от decimalseparator.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Код не мой, впервые увидел что-то подобное на DM и до сих пор под впечатлением ![]() |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Вопрос может и простой. Но пока не понятно зачем это нужно? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Yanis, хочется задать один вопрос: И что?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Это что же нужно такого сделать, чтобы получить d = 0,569999999999993 ? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
||||
|
||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
А то, что люди пишут программы не зная простых вещей. Одним примером показал как округлять и вычленять дробную часть.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Ему нужно не вычленить дробную часть, а получить дробную часть в виде целого числа.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
xapm> как узнать сколько знаков после запятой что бы подобрать множитель ?
теоретически там может быть бесконечное число знаков, так что постановка задачи вызывает сомнения (ограничение точности в машинном представлении проблему вряд ли снимает) если 1 поделят на 3 - вы сколько конкретно троек (разрядов в вашем результате) хотите получить? |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Не может. Он же пишет, что у него double или extended. Эти типы имеют вполне конкретное число десятичных знаков. Не нужно выдумывать себе проблем. Ответ на вопрос уже дан: искать DecimalSeparator и брать все что после него. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Хм. Интересно. В этих трех случаях: 1) Х = 1.256 2) Х = 1.0256 3) Х = 0.256Е-10 результат будет одинаковый или разный? ))) -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Ребята, еще раз повторю, не выдумывайте себе проблем.
northener, результат будет разный и вообще не понятно о чем вопрос. Даже программистом быть не надо, что бы увидеть это. Но суть не в этом. Да, мы все знаем, что если в double мы присвоим 1.3, то реально там сохраниться близкое, но не точно 1.3. Все это от того, что в двоичном представлении нельзя представить 1.3 как конечную дробь, приходится округлять. Но обычных пользователей это не должно волновать. Если есть задача как у ТС, то давая программе 1.3, пользователь хочет получить в ответ 3. Нужно исходить из этого и не придумывать себе геморрой. FloatToStr переведет 1.3 как надо, как ждет пользователь. Найти через pos DecimalSeparator и "забрать" все что после - труда не составит. Добавлено через 1 минуту и 44 секунды Ааа, northener, я понял о чем ты. ![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
Poseidon, у меня (как и у northener) не "выдуманная себе проблема" а лишь вопрос к тредстартеру
ты отвечаешь за него, как будто знаешь задачу точнее его самого |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |