| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > дробную часть в целое |
| Автор: xapm 16.6.2013, 06:48 |
| Hi, Вот возник достаточно простой вопрос, как дробнуй часть числа значения double или extended преобразовать в целое. например 0.75 в 75, тоесть понятно что 100*0.75 даст нужный результат но встаёт тогда вопрос а как узнать сколько знаков после запятой что бы подобрать множитель ? Самый простой вариант который приходит на ум это перевести в string и посчитать length-ом , но как-то это не кашерно выглядит. Должны же быть какие-то альтернативы в конце-то концов Или опять таки перевести в стрингу и отрезать '0.' , но это не то ... |
| Автор: Данкинг 16.6.2013, 10:24 |
| Перевести в string и взять второе слово от decimalseparator. |
| Автор: kami 16.6.2013, 15:34 | ||
Код не мой, впервые увидел что-то подобное на DM и до сих пор под впечатлением |
| Автор: Yanis 21.6.2013, 20:30 | ||
Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51bd35796ccc198d32000002#findElement_E7045_51c48dcf6ccc196f480002fb_0 |
| Автор: Poseidon 21.6.2013, 20:45 |
| Yanis, хочется задать один вопрос: И что? |
| Автор: northener 21.6.2013, 21:28 | ||
Это что же нужно такого сделать, чтобы получить d = 0,569999999999993 ? |
| Автор: Yanis 21.6.2013, 21:55 |
| Упс, там дробное другое стояло :) Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51bd35796ccc198d32000002#findElement_E7045_51c4a1846ccc19874700105d_0 |
| Автор: Yanis 21.6.2013, 21:58 |
| А то, что люди пишут программы не зная простых вещей. Одним примером показал как округлять и вычленять дробную часть. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51bd35796ccc198d32000002#findElement_E7045_51c4a25b6ccc1963690002d1_0 |
| Автор: Poseidon 22.6.2013, 03:23 |
| Ему нужно не вычленить дробную часть, а получить дробную часть в виде целого числа. |
| Автор: PointerToNil 22.6.2013, 11:53 |
| xapm> как узнать сколько знаков после запятой что бы подобрать множитель ? теоретически там может быть бесконечное число знаков, так что постановка задачи вызывает сомнения (ограничение точности в машинном представлении проблему вряд ли снимает) если 1 поделят на 3 - вы сколько конкретно троек (разрядов в вашем результате) хотите получить? |
| Автор: Poseidon 22.6.2013, 17:18 | ||
Не может. Он же пишет, что у него double или extended. Эти типы имеют вполне конкретное число десятичных знаков. Не нужно выдумывать себе проблем. Ответ на вопрос уже дан: искать DecimalSeparator и брать все что после него. |
| Автор: northener 22.6.2013, 20:09 | ||
Хм. Интересно. В этих трех случаях: 1) Х = 1.256 2) Х = 1.0256 3) Х = 0.256Е-10 результат будет одинаковый или разный? ))) |
| Автор: Poseidon 23.6.2013, 00:34 |
| Ребята, еще раз повторю, не выдумывайте себе проблем. northener, результат будет разный и вообще не понятно о чем вопрос. Даже программистом быть не надо, что бы увидеть это. Но суть не в этом. Да, мы все знаем, что если в double мы присвоим 1.3, то реально там сохраниться близкое, но не точно 1.3. Все это от того, что в двоичном представлении нельзя представить 1.3 как конечную дробь, приходится округлять. Но обычных пользователей это не должно волновать. Если есть задача как у ТС, то давая программе 1.3, пользователь хочет получить в ответ 3. Нужно исходить из этого и не придумывать себе геморрой. FloatToStr переведет 1.3 как надо, как ждет пользователь. Найти через pos DecimalSeparator и "забрать" все что после - труда не составит. Добавлено через 1 минуту и 44 секунды Ааа, northener, я понял о чем ты. |
| Автор: PointerToNil 23.6.2013, 01:24 |
| Poseidon, у меня (как и у northener) не "выдуманная себе проблема" а лишь вопрос к тредстартеру ты отвечаешь за него, как будто знаешь задачу точнее его самого |