Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 104
1

Вывести первую цифру после запятой

06.03.2016, 21:03. Показов 2578. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь написать программу, которая выводит первую цифру после запятой на Common Lisp (clisp).

Я делаю это так:
Lisp
1
2
(setq number 100.49999)
(format t "~a~%"  (mod (floor (* 10 number)) 10))
Bash
1
4
И для большинства чисел приведенный выше код работает, но если взять число побольше, то там при умножении происходит ошибка вычислений:
Lisp
1
2
(setq number 1000.49999)
(format t "~a~%"  (mod (floor (* 10 number)) 10))
Bash
1
5
Как это сделать правильно?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.03.2016, 21:03
Ответы с готовыми решениями:

Взять первую цифру после запятой
Всем привет! Имеется число типа Double - 1,345678. Мне нужно вернуть первую цифру после запятой...

Выделить дробную часть числа и определить её первую цифру после запятой
1) Дано число с дробной частью, например: 25.6782. Выделить дробную часть и определить её 1-ю...

Переменной d присвоить первую цифру после запятой некоторой переменной x типа float
Нужно целой переменной d присвоить первую цыфру после комы некоторой переменной x типа float ...

Как вывести только 1 цифру после запятой?
Пишу игру, мне нужно выводить их на экран, делаю это так private void Update() {...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37452 / 20823 / 4281
Регистрация: 12.02.2012
Сообщений: 34,241
Записей в блоге: 14
06.03.2016, 21:47 2
Лучший ответ Сообщение было отмечено kquick как решение

Решение

Здесь, похоже, проблема в низкой точности обычных чисел с плавающей точкой. Когда берешь "число побольше" добавляй в конец "D0" (это превратит число в число с двойной точностью):

Lisp
1
2
3
4
5
6
CL-USER 11 > (setq number 1000.49999D0)
1000.49999D0
 
CL-USER 12 > (format t "~a~%"  (mod (floor (* 10 number)) 10))
4
NIL
Добавлено через 20 минут
В HomeLisp это может выглядеть так:

Lisp
1
2
(defun task (p)
 (fix (* 10 (- p (fix p)))))
1
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 104
06.03.2016, 22:23  [ТС] 3
Теперь проблема с чтением (конвертацией) строки в double-float:
Lisp
1
2
3
4
5
6
7
8
(setq float-number 1000.49999)
(setq double-number1 1000.49999D0)
(setq double-number2 (coerce float-number 'double-float))
(setq number (with-input-from-string (in "1000.49999") (read in)))
(format t "~a, ~a~%" (type-of float-number) float-number)
(format t "~a, ~a~%" (type-of double-number1) double-number1)
(format t "~a, ~a~%" (type-of double-number1) double-number2)
(format t "~a, ~a~%" (type-of number) number)
Bash
1
2
3
4
SINGLE-FLOAT, 1000.5
DOUBLE-FLOAT, 1000.49999d0
DOUBLE-FLOAT, 1000.5d0
SINGLE-FLOAT, 1000.5
Добавлено через 13 минут
Еще помогает такая магическая строчка "(setf *read-default-float-format* 'double-float)". Как понимаю задает формат чисел с плавающей точкой по умолчанию как double-float. Но, как мне кажется, это как-то грубо:

Lisp
1
2
3
4
5
(setf *read-default-float-format* 'double-float)
(setq number 1000.49999)
(setq str-number (with-input-from-string (in "1000.49999") (read in)))
(format t "~a, ~a, ~a ~%" (type-of number) number (mod (floor (* 10 number)) 10))
(format t "~a, ~a, ~a ~%" (type-of str-number) str-number (mod (floor (* 10 str-number)) 10))
Bash
1
2
DOUBLE-FLOAT, 1000.49999, 4 
DOUBLE-FLOAT, 1000.49999, 4
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37452 / 20823 / 4281
Регистрация: 12.02.2012
Сообщений: 34,241
Записей в блоге: 14
07.03.2016, 14:45 4
Цитата Сообщение от kquick Посмотреть сообщение
Но, как мне кажется, это как-то грубо:
- почему?
0
07.03.2016, 14:45
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2016, 14:45
Помогаю со студенческими работами здесь

Как вывести только 1 цифру после запятой в float?
в переменное score много знаков после запятой, как вывести только один? private void Update() ...

Вывести первую цифру после десятичной точки
Добрый день! Задача на С# Но можно на любом языке попробовать как решить то не пойму??? ...

Вывести первую цифру после десятичной точки.
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. При...

Вывести в одну строку первую цифру, пробел, вторую цифру (цифры заданы в регистрах AX и BX)
Добрый день! В универе начинаю учить ассемблер. На лекции не понятно вообще ничего. Лекции по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как удалить файл из репозитория Git без его физического удаления
bytestream 26.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью удаления файлов из репозитория. Однако этот процесс может быть сложнее, чем кажется на первый взгляд,. . .
Как вынести изменения в коде в новую ветку (branch) в Git
bytestream 26.01.2025
Git представляет собой современную систему контроля версий, которая произвела революцию в процессе разработки программного обеспечения. Эта распределенная система позволяет программистам эффективно. . .
Всё не так уж и плохо.
Hrethgir 25.01.2025
Запустил более-менее сносно регистры в связке с сумматорами. Да - виновата оптимизация от Gowin EDA, дело в том, что Education шифрует нетлист, да и вообще много чего не позволяет. Просто обвязал. . .
Cisco ASA: подробное руководство по настройке и использованию
hw_wired 25.01.2025
В сетевой безопасности межсетевые экраны играют критически важную роль в защите корпоративных инфраструктур от постоянно растущего числа киберугроз. Среди множества решений для обеспечения. . .
Cisco Intelligent Services Gateway: руководство по настройке
hw_wired 25.01.2025
В сетевых инфраструктурах Cisco Intelligent Services Gateway (ISG) играет ключевую роль в организации и управлении сервисами для конечных пользователей. Этот компонент представляет собой. . .
Использование Go (Golang) в Highload-проектах: преимущества и особенности
bytestream 25.01.2025
В мире высоконагруженных систем выбор правильного инструментария играет ключевую роль в успехе проекта. Go (Golang) представляет собой относительно молодой язык программирования, который быстро. . .
Откуда у float лишние цифры в конце дробной части. Представление чисел с плавающей точкой
bytestream 25.01.2025
При разработке программного обеспечения часто возникает необходимость работать с вещественными числами, которые содержат дробную часть. В современных компьютерных системах такие числа представляются. . .
Как использовать глобальную переменную в функции в Python
bytestream 25.01.2025
В программировании на Python глобальные переменные представляют собой особый тип переменных, которые доступны для использования во всех частях программы, включая различные функции, классы и модули. . . .
Как в цикле обойти все элементы map в Java
bytestream 25.01.2025
В разработке на Java одной из наиболее востребованных структур данных является интерфейс Map, который предоставляет эффективный способ хранения и управления парами "ключ-значение". Разработчики. . .
Для чего нужен UserManager.isU­serAGoat(­) в Android и как это использовать
bytestream 25.01.2025
В мире Android-разработки существует множество интересных и порой загадочных функций, о которых знают далеко не все разработчики. Одной из таких функций является метод UserManager. isUserAGoat(),. . .
Как обойти массив в JavaScript. Всё о циклах
bytestream 25.01.2025
JavaScript представляет собой мощный язык программирования, широко используемый в веб-разработке, где массивы и циклы являются фундаментальными концепциями для эффективной работы с данными. Массив в. . .
Как сделать, чтобы существующая ветка отслеживала удалённую в Git. Связывание локальных и удалённых веток
bytestream 25.01.2025
В разработке программного обеспечения системы контроля версий стали неотъемлемой частью процесса создания качественного программного продукта. Эти инструменты позволяют разработчикам эффективно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru