Not really, the number of decimal places is a function of the internal representation of the number. What you see when you display the number is, is the number as a string for printing.
So if you are interested in the displayed value, you can control the number of decimal places with formatting directives in the first place e.g., %5.2f
, or use the string function approach as you mention in your post after the fact once you have the number as a string.
Also, as an aside, would you count trailing zeros?
Perhaps it would be helpful to state your goal for wanting to do this? There might be other ways to accomplish what you are looking to do.
Update:
Based on your update, the problem is really not counting decimal places, rather you are running into represenation issue/rounding errors (not that uncommon). The problem is that some fractional values can’t be exactly represented in base 2. Here’s an exhaustive explanation: What Every Computer Scientist Should Know About Floating-Point Arithmetic.
Take a look at this SO question: Understanding floating point representation errors; what’s wrong with my thinking?
You can try this approach to round the value:
float rounded_val = floorf(value * 100.0 + 0.5) / 100.0;
Wikipeadia has a whole article on rounding.
0 / 0 / 0 Регистрация: 18.01.2014 Сообщений: 6 |
|
1 |
|
Подсчитать количество цифр после запятой в вещественном числе23.05.2014, 13:53. Показов 51315. Ответов 21
Доброго времени суток. Подскажите, пожалуйста, как посчитать кол-во цифр после запятой?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
23.05.2014, 13:53 |
21 |
Заблокирован |
|
23.05.2014, 13:55 |
2 |
перегоняй в строку, находи в строке ‘.’ и считай кол-во буковок (циферок в данном случае) посл точки до конца строки
0 |
0 / 0 / 0 Регистрация: 18.01.2014 Сообщений: 6 |
|
23.05.2014, 13:57 [ТС] |
3 |
С помощью чего это делать? size()?strlen()?Чего именно?
0 |
zzzZZZ… 527 / 358 / 94 Регистрация: 11.09.2013 Сообщений: 2,041 |
|
23.05.2014, 14:06 |
4 |
С помощью чего это делать? size()?strlen()?Чего именно? itoa();
0 |
62 / 43 / 20 Регистрация: 28.09.2013 Сообщений: 193 |
|
23.05.2014, 14:15 |
5 |
dzrkot, itoa() переводит только из int не?
0 |
DiffEreD 1456 / 793 / 257 Регистрация: 21.06.2011 Сообщений: 1,740 Записей в блоге: 2 |
||||
23.05.2014, 14:20 |
6 |
|||
Например в числе 5.4569 -4 знака после запятой Это только так кажется:
1 |
0 / 0 / 0 Регистрация: 18.01.2014 Сообщений: 6 |
|
23.05.2014, 14:26 [ТС] |
7 |
Ого.Это конечно интересно. Но надо чтобы выводил 4.И c itoa() я совсем запуталась в конверсиях( оба числа типа double. на какой тип конвертировать)
0 |
Заблокирован |
||||
23.05.2014, 14:27 |
8 |
|||
Сообщение было отмечено Kolter как решение Решение
0 |
0 / 0 / 0 Регистрация: 18.01.2014 Сообщений: 6 |
|
23.05.2014, 14:43 [ТС] |
9 |
newbie666, спасибо, посижу,поразбираюсь Добавлено через 10 минут
0 |
215 / 63 / 25 Регистрация: 30.04.2013 Сообщений: 865 Записей в блоге: 10 |
|
23.05.2014, 15:03 |
10 |
DiffEreD, Оооо ! больше 15 знаков не канает Добавлено через 2 минуты
1 |
NuMeRiC_ 3 / 3 / 0 Регистрация: 03.06.2019 Сообщений: 64 |
||||
23.08.2019, 21:47 |
11 |
|||
Вот в-я, которая считает вполне нормально, но иногда долго:
0 |
Диссидент 27465 / 17154 / 3780 Регистрация: 24.12.2010 Сообщений: 38,636 |
|
23.08.2019, 22:24 |
12 |
Для справки.
0 |
Комп_Оратор) 8846 / 4588 / 619 Регистрация: 04.12.2011 Сообщений: 13,692 Записей в блоге: 16 |
|
23.08.2019, 23:33 |
13 |
У переменной типа double нет количества знаков после точки. Байт, вот страничка: Добавлено через 2 минуты
1 |
Диссидент 27465 / 17154 / 3780 Регистрация: 24.12.2010 Сообщений: 38,636 |
|
24.08.2019, 09:45 |
14 |
53 двоичных разряда дают то 15 то 16 10-тичных, Зерно истины в этом есть. Но тогда и вопрос должен был быть поставлен по другому. Сколько десятичных знаков имеет тип double? Добавлено через 6 минут
1 |
Комп_Оратор) 8846 / 4588 / 619 Регистрация: 04.12.2011 Сообщений: 13,692 Записей в блоге: 16 |
|
24.08.2019, 11:57 |
15 |
Но тогда и вопрос должен был быть поставлен по другому. Конечно! Я же и говорю:
Вопрос топика, недоизучен ТС и требует уточнения формулировки.
Но таких “задач” на форуме встречалось довольно много. Что я отношу к идиотизму не столько ТС-ов, сколько преподавателей, слабо разбирающихся в данном вопросе. Мир удивительно стабилен, в некоторых своих проявлениях.
Там говорится о знаках после запятой…. Значит для числа 5.4569 это будет 15(16) – 1 = 14(15) По примеру топика речь о знаках в мантиссе вида a.bcde… где a – не ноль. А недетерминированное в числе знаков 10-чное представление проще всего решить отбросив 16. То есть, для 64-представления IEEE754 уверенно можно говорить о 15 для мантиссы. Так кажется. И три знака для экспоненты + знак самой экспоненты и знак числа экспоненты (песня, название песни, то о чём песня и звучащая песня). То есть e-301 – четыре знака. Стало быть строка для представления в char должна быть не менее 20=15+4 +1. Один – для десятичной точки. Но это для мантиссы с точкой и без ведущего нуля. То есть для человеческого глаза. А в формате где ноль – ведущий (в мантиссе вида 0.bcde…) перед первой значащей (не нулевой) после запятой, можно на точке съэкономить. Но не всем будет понятно. Добавлено через 44 минуты
1 |
Байт Диссидент 27465 / 17154 / 3780 Регистрация: 24.12.2010 Сообщений: 38,636 |
||||
24.08.2019, 23:51 |
16 |
|||
Копая нонче картошку на огороде (а она выдалась на диво – с кулак!), пришел, как мне кажется, к разумному решению. Что-то вроде этого
Конечно, для полного тахащусса надо добавить некоторые проверки. Но суть в том, что нам дается представление числа, вот с ним и надо работать. И это – просто.
1 |
Комп_Оратор) 8846 / 4588 / 619 Регистрация: 04.12.2011 Сообщений: 13,692 Записей в блоге: 16 |
|
25.08.2019, 00:06 |
17 |
Конечно, для полного тахащусса надо добавить некоторые проверки. Да. Это точно. Вот допустим число выглядит так: 1.05808786500000e-305
1 |
Диссидент 27465 / 17154 / 3780 Регистрация: 24.12.2010 Сообщений: 38,636 |
|
25.08.2019, 00:27 |
18 |
Ведь речь то может идти только о строковом десятичном представлении (моё предположение) Золотые слова ваши! Но только эти. Имхо, все остальное к делу никакого касательства не имеют. И нули вы зря отбрасываете. Зачем? Ваше число имеет 305+15 = 320 знаков после запятой (если я не ошибся,, считая ваши циферки) Добавлено через 5 минут
1 |
Комп_Оратор) 8846 / 4588 / 619 Регистрация: 04.12.2011 Сообщений: 13,692 Записей в блоге: 16 |
|
25.08.2019, 01:21 |
19 |
если написано 1.00000, то тут именно 5 знаков Это как раз я и сказал там, где вы увидели золотые слова. То есть, смысл вопроса:
Подскажите, пожалуйста, как посчитать кол-во цифр после запятой? может присутствовать лишь если речь идёт о значащих цифрах. Последняя группа нулей к ним не относится и может быть отброшена. Это имеет смысл только в строковом представлении.
0 |
Комп_Оратор) 8846 / 4588 / 619 Регистрация: 04.12.2011 Сообщений: 13,692 Записей в блоге: 16 |
|
25.08.2019, 08:19 |
20 |
И ещё. Вот это
Мы анализируем только написанное, и нам плевать на то, что делает с этим комп преувеличение. Программирование и математика порождают разные абстракции на одной и той же словарной (терминологической) базе. Тут важно, что имеет в виду человек, задающий тему. У ТС
В программе присутствуют как все число n=5.4569,так и дробная часть То есть, речь о типе данных с плавающей точкой (мы не знаем float или double или long double – вот это таки плохо) но не о числах с математической точки зрения. Мат-абстракция числа не имеет конечного представления в общем случае, не выражаемого функционально. Число Пи легко можно выразить как отношение длины окружности к диаметру, например. На этом легкость и заканчивается.
0 |
Вы можете использовать регулярное выражение для синтаксического анализа value
, записи десятичных цифр и подсчета длины совпадения, если таковые имеются:
import re
def num_decimal_places(value):
m = re.match(r"^[0-9]*.([1-9]([0-9]*[1-9])?)0*$", value)
return len(m.group(1)) if m is not None else 0
это немного меньше “сырых”, чем разделение строки с помощью нескольких if else
, но не уверен, что они более простые или более читаемые.
Stefano Sanfilippo
26 фев. 2015, в 19:36
Поделиться
Вам не нужно регулярное выражение, вы можете конвертировать в float
и конвертировать обратно в строку! это автоматически удалит нули:
>>> def convertor(s):
... try :
... int(s.rstrip('0').rstrip('.'))
... return 0
... except:
... return len(str(float(s)).split('.')[-1])
...
>>> convertor('4.0230')
3
>>> convertor('4.0')
0
>>> convertor('4')
0
Kasramvd
26 фев. 2015, в 19:52
Поделиться
вы также можете просто попробовать что-то вроде:
try:
return len(str(num).split('.')[1].rstrip('0'))
except
return 0
acushner
26 фев. 2015, в 19:21
Поделиться
Самый лучший и самый Pythonic способ достичь этого:
import decimal
x = '56.001000'
x = x.rstrip('0') # returns '56.001'
x = decimal.Decimal(x) # returns Decimal('0.001')
x = x.as_tuple().exponent # returns -3
x = abs(x) #returns 3
Выше код можно записать проще:
>>> x = '56.001000'
>>> abs(decimal.Decimal(x.rstrip('0')).as_tuple().exponent)
3
Ниже приведен список используемых функций для дополнительной справки:
- str.rstrip(): вернуть копию строки с удаляемыми концевыми символами.
- decimal.Decimal(): создать новый десятичный объект, основанный на значении.
- x.as_tuple(): возвращает namedtuple в формате: DecimalTuple (знак = 0, цифры = (1,), показатель = -3)
- abs(): вернуть абсолютное значение числа.
Moinuddin Quadri
26 фев. 2015, в 19:55
Поделиться
import re
def f(s):
ls = s.split('.', 1)
if len(ls) == 2 and re.match(r'd*$', ls[1]):
return len(ls[1].rstrip('0'))
return 0
assert f('12') == 0
assert f('12.') == 0
assert f('12.1') == 1
assert f('12.100006') == 6
assert f('12.1.3') == 0
assert f('12.1abc') == 0
assert f('12.100000') == 1
ferhat elmas
26 фев. 2015, в 19:47
Поделиться
Строковым процессом:
- Проверить
.
присутствует в числовой строке или нет. - Если нет, то верните 0.
- Если присутствует строка с разделительным номером на
.
и получить второй элемент из результата split. - Удалите 0 с правой стороны.
- Возврат len элемента.
код:
>>> def dCount(no_str):
... if "." in no_str:
... return len(no_str.split(".")[1].rstrip("0"))
... else:
... return 0
...
>>> dCount("2")
0
>>> dCount("2.002")
3
>>> dCount("2.1230")
3
>>> dCount("2.01230")
4
>>>
Vivek Sable
26 фев. 2015, в 18:16
Поделиться
Вы можете попробовать использовать функцию Decimal
в python:
abs(Decimal(string_value).as_tuple().exponent)
как объяснено в
Легкий способ поиска десятичных знаков
Pedro Braz
26 фев. 2015, в 19:29
Поделиться
Ещё вопросы
- 0Объект, два выпадающих списка, ng-options и привязка значения
- 0некоторые персонажи ведут себя необычно в функции htmlentities
- 1SQLAlchemy ResultProxy загружать строки по требованию?
- 0vector.push_back () intellisense error
- 1объект цепочки исключений в JAVA
- 0Google войти с помощью angularjs
- 0Код Jquery для разделения ссылки href
- 0Как обрабатывать промахи в функции get (key) C ++ HashMap?
- 0Угловая лучшая практика. Действия контроллера, запускающие анимацию
- 0Функция события клика не запускается из лайтбокса Fancybox
- 0C3P0 один сервер несколько баз данных
- 1C # .NET 4.0 Перетаскивание между двумя приложениями
- 1Eclipse IDE ошибка компиляции
- 1Невозможно отобразить два элемента в пользовательском представлении
- 0REGEX PHP Строка в JSON Вывод
- 1Сохранение стилей при замене слов в python-docx
- 0jQuery: не (: проверено) не работает?
- 0Возвращаемые значения в редактируемой таблице Datatables – самые последние изменения для всех отредактированных элементов.
- 0JQuery, div отображается, но не исчезает
- 1Определить предмет, объект, глагол в английском предложении?
- 0Как установить объект файла как ngModel, используя $ setViewValue (file)
- 0Как создать ссылки с использованием JSON, которые при нажатии отображаются в отдельном элементе <div>?
- 1Рассчитать RA DEC / AZ EL точек Лагранжа, видимых с места на земле
- 1Эрланг считает, что возраст?
- 0Twiiter Follow Button For Newsletter / Html email
- 0Читайте информацию о компоновщике из dll [дубликата]
- 1Возобновление асинхронного чтения с использованием Rx?
- 0Google Places хранит результаты в Mysql с PHP
- 1Получение метаданных сущности с помощью веб-API
- 0Проблема CSS – что вызывает эту вертикальную линию?
- 1Не удается получить электронную почту пользователя с интеграцией Facebook
- 1Как изменить легенду Matplotlib
- 0Как показать изображение и контент из базы данных на страницу PHP?
- 0Указатель на имя пользователя
- 1Датагрид привязка МВВМ
- 0Побитовое «не» нуля равно нулю, когда ноль рассчитывается сдвигами
- 0codeigniter извлекает таблицу mysql с where_in + сохраняет порядок массива ключей в массиве результатов
- 0Добавление URL сайта в заголовок сайта
- 0PHP-SQL Подготовленные операторы с переменным числовым именем таблицы [дубликаты]
- 0Выбор элемента из многомерного массива
- 1Отслеживание и очистка истории активности Android
- 0Невозможно получить доступ к элементу из класса сортировки c ++
- 0Как я могу сказать Visual Studio, чтобы связать библиотеку с моим проектом?
- 0Angular Template Cache – Очистить кэш для обновленного шаблона
- 1React router добавляет страницу наконец при маршрутизации
- 1Невозможно добавить изображение к кнопке с помощью getResource () (получить NullPointerException – создание проекта с помощью муравья)
- 1Попросите пользователя продолжить просмотр следующих 5 строк данных
- 0Как включить отображение Jquery Mobile – карты Google только при нажатии кнопки
- 1Кнопка onClick не привязана к методу в Activity
- 1Каков наилучший способ проверки правильных dtypes в кадре данных pandas в рамках тестирования?
f f
Ученик
(64),
закрыт
5 лет назад
Олег Олегович
Просветленный
(22336)
5 лет назад
//double d = 100;
double d = 100.123456789012;
int i = 0;
while (d * Math.Pow(10, 1 + i) % 10 != 0) { i++; }
Console.WriteLine(“У числа {0} {1} знаков после запятой.”, d, i–);
f fУченик (64)
5 лет назад
“У числа 1,569975 7 знаков после запятой.”
Эх, близко, но не то. Там алгоритм сложнее…
f f
Ученик
(64)
Можно, конечно, с округлением поиграть, но это тоже как-нибудь да сломает программу
Алекс Куха
Высший разум
(427016)
5 лет назад
Число значащих цифр для каждого типа известно заранее. (7/15)
f fУченик (64)
5 лет назад
Я имею ввиду следующее:
Пользователь ввел число 123,4985
Надо вывести 4 (потому что 4985)
Алекс Куха
Высший разум
(427016)
не факт. Введённое число необязательно будет равно хранимому в памяти
Sergey
Гуру
(2682)
5 лет назад
число дабл содержит 52+1 бит в мантиссе. Это соответствует ~15 десятичным знакам.
Если число цифр после запятой это, число значимых знаков после запятой в виде ХХХХ. YYYY, то это 15 – log10(число).
Сергей Куксенков
Просветленный
(41944)
5 лет назад
double number = 129.12563;
int count = BitConverter.GetBytes(decimal.GetBits((decimal)number)[3])[2];
Console.WriteLine(count); // 5
Как это работает тут: matthewedmondson . info / 2014 / 03 / reliance-on-implementation-details . html
← →
arhis
(2006-09-21 16:57)
[0]
узнаю так:
met:=2;
PrBuf:=(Deal.Price-Int(Deal.Price))*10;
While true do
begin
PrBuf:=PrBuf*10;
if (PrBuf-Int(PrBuf))=0 then break;
inc(met);
end;
работает кроме случая 100.023
В этом случае релультат вычитания аномален.
Может это вообще можно както прощще сделать?
← →
Ketmar ©
(2006-09-21 17:00)
[1]
можно. считать, что их всегда, например, 8.
← →
arhis
(2006-09-21 17:01)
[2]
мне нужно количество но не меньше двух. Это для печати официального документа
← →
arhis
(2006-09-21 17:02)
[3]
грубо говоря на третьей итерации получаем нечто в виде 23-23=0.0000..000123123
← →
XTD ©
(2006-09-21 17:02)
[4]
Отними от твоего числа целое, останется после запятой Length(IntToStr(S))
← →
arhis
(2006-09-21 17:05)
[5]
Int к дроби?
← →
Ketmar ©
(2006-09-21 17:05)
[6]
конвертируй в строку, работай со строкой.
← →
arhis
(2006-09-21 17:05)
[7]
или экспонента или сам указывай число знаков а мне и нужно узнать их количество
← →
XTD ©
(2006-09-21 17:06)
[8]
(5) Умнож на 100
← →
arhis
(2006-09-21 17:06)
[9]
К тому же после таких арифметических вывертов становиться как то очень не спокойно на душе.
← →
palva ©
(2006-09-21 17:06)
[10]
Если число представлено с погрешностью, то количество знаков узнать невозможно. Ну а если число представлено точно, то перевести в десятичную систему и посчитать нули.
← →
arhis
(2006-09-21 17:07)
[11]
XTD © (21.09.06 17:06) [8]
Вы алгоритм смотрели? там как раз и умножается а потом вычитается челое, но потом происходит глюк с арифметической операцией, вот я и спрашиваю что я делаю не так. Frac мне вообще от 234 возвращает 1
← →
Наиль ©
(2006-09-21 17:08)
[12]
> if (PrBuf-Int(PrBuf))=0 then break;Uses Math
if IsZero(PrBuf) then break;
← →
Ketmar ©
(2006-09-21 17:09)
[13]
>[7] arhis 06-09-21 17:05
>или экспонента или сам указывай число знаков а
>мне и нужно узнать их количество
указать побольше, лишние нули обрезать — религия запрещает?
← →
Наиль ©
(2006-09-21 17:09)
[14]
В [12] опечатку сам исправишь
← →
arhis
(2006-09-21 17:12)
[15]
Наиль © (21.09.06 17:08) [12]
Пробовал не определяет как ноль
← →
arhis
(2006-09-21 17:13)
[16]
2,842*10-14 это не ноль
← →
arhis
(2006-09-21 17:18)
[17]
Ketmar © (21.09.06 17:09) [13]
Да, моя религия мне не позволяет чисто математическую задачу решать чернез строки. К тому же повторюсь уж слишком смущает столь экстравагантный результат простейшей математической операции.
← →
Ketmar ©
(2006-09-21 17:19)
[18]
>[17] arhis 06-09-21 17:18
>тому же повторюсь уж слишком смущает столь
>экстравагантный результат простейшей
>математической операции.
“это дубли у нас простые” (ц)
← →
arhis
(2006-09-21 17:56)
[19]
Тайна сия велиуа есть.
0.0012 работает
0.0011 не работает
← →
han_malign ©
(2006-09-21 18:30)
[20]
> Тайна сия велиуа есть.
– угу, тебе число Пи до какого знака выводить?
Ты вообще понимаешь, что каждый раз когда умножаешь на 10 – увеличиваешь в 10 раз погрешность?
У extended 19-20 – значимых цифр, умножив на 100 – 100.023 ты и получаешь погрешность в (19-5)-знаке(2,842*10-14), и дальше эта погрешность может увеличиваться… Другое дело, что, в зависимости от конкретного значения, погрешность умножения на 10 может быть и нулевой – но это скорее исключение.
← →
Ketmar ©
(2006-09-21 18:37)
[21]
>[20] han_malign(c) 06-09-21 18:30
аффтару на это уже намекали. %-)
← →
arhis
(2006-09-21 18:52)
[22]
han_malign © (21.09.06 18:30) [20]
я не совсем понимаю причем тут погрешности?
Я беру число 0,023 и умножаю его на 100, и всегда получаю 2,3 хоть тресни. потом умножаю еще на десять и получаю 23. Потом просто вычитаю из 23 23 и не получаю нуля?
Где моя логика неправа?
← →
arhis
(2006-09-21 18:54)
[23]
Ketmar © (21.09.06 18:37) [21]
Вы, сударь попытались бы лучше объяснить в чем проблема а не упражнятся в намеках. Насколько я понимаю ветка называется начинающим? Я по адресу попал?
← →
Ketmar ©
(2006-09-21 19:34)
[24]
>[23] arhis 06-09-21 18:54
>Ketmar c (21.09.06 18:37) [21]
>Вы, сударь попытались бы лучше объяснить в чем
>проблема а не упражнятся в намеках.
я, вообще-то, сам решу, как и что мне писать. предпочитаю учить работать головой, а не челюстями. если в голове есть моск, то намёка достаточно. если нет — то даже открытый текст не поможет.
← →
Virgo_Style ©
(2006-09-21 19:37)
[25]
arhis (21.09.06 18:52) [22]
я не совсем понимаю причем тут погрешности?
if Trunc( 10 ) = 0 then Label1.Caption:=”ровно десять” else Label1.Caption:=”имеется погрешность”;
← →
Ketmar ©
(2006-09-21 19:41)
[26]
>[25] Virgo_Style(c) 06-09-21 19:37
это что такое, позвольте спорсить? не бывает погрешностей у целых чисел. %-)
← →
palva ©
(2006-09-21 19:58)
[27]
> Я беру число 0,023 и умножаю его на 100, и всегда получаю 2,3 хоть тресни.
В этом случае вы правы. Но ваша программа ведь делает другое. Число 0,023 не представимо точно в 2 с/c, значит любая двоичная ЭВМ будет хранить его приближенно в виде округленной периодической дроби. При умножении на 100 разрядная сетка числа переполнится, поэтому процессор также округлит результат. В результате вы не получите 2,3. Тем более, что число 2,3 также невозможно представить в ЭВМ, хоть тресни. Другое дело, что если вы переведете результат в 10 с/с и округлите до десятых, то получите 2,3. В задачах подобных вашей числа хранят в виде целых чисел (как результат умножения исходных чисел на какое нибудь большое число) либо в виде десятичных дробей, но тогда самостоятельно реализуют арифметику на таких числах или используют готовые пакеты.
Вопросы подобные вашим задаются раз в неделю и уже всем надоели. Тем более, что они часто сопровождаются нежеланием задающего вопрос понять, что происходит на самом деле, и как там внутри всё устроено. Отсюда такая реакция. Не обижайтесь.
← →
Virgo_Style ©
(2006-09-21 19:59)
[28]
Ketmar © (21.09.06 19:41) [26]
Это… хм. Глупость какая-то, по всей видимости %-)
← →
Ketmar ©
(2006-09-21 20:43)
[29]
>[28] Virgo_Style(c) 21-Sep-XLI A.S., 19:59
>Это… хм. Глупость какая-то, по всей видимости %-)
почему-то и мне так показалось. %-)
← →
Palladin ©
(2006-09-22 08:29)
[30]
> arhis
используй Currency и не мучайся
← →
arhis
(2006-09-22 10:36)
[31]
Ketmar © – флудер.
palva © (21.09.06 19:58) [27]
Честно сказать я не очень понимаю почему дебаггер мне радостно докладывает что у меня и там и там 23 а вычесть их не может. Странное поведение системы в целом. Меня не волнуют с какой погрешностью комп посчитал что в этой ячейке у меня 23. Ему самому на это наплевать когда он мне показывает что там 23 а при арифметической операции он вдруг про эту погрешность вспоминает.
Особенно мне это не понятно изза того что программа только и делает что умножает на 10 в разных степенях и никаких проблем до этого момента не было.
По поводу остального могу сказать что не даром обратился в форум для начинающих и уж тем более никогда не задумывался о представлении чисел в двоичной системе. У меня совершенно другие задачи
← →
Ketmar ©
(2006-09-22 10:41)
[32]
>[31] arhis 22-Sep-XLI A.S., 10:36
>Ketmar c – флудер.
ты не первый. тут где-то на сайте есть ссылочка — “написать админу”. можешь поделиться с Максимом ценным наблюдением. или вот — отписать конкретно модератору этого раздела. говорят, тоже помогает.
← →
Ketmar ©
(2006-09-22 10:42)
[33]
вдогон: интересно, какие должны быть задачи, если задумываться о том, как машина представляет числа — не надо. “трамвай работает так — вж-ж-ж, дзинь, дзинь”?
← →
Amoeba ©
(2006-09-22 11:31)
[34]
Автору вопроса настоятельно рекомендуется прочесть статью “Неочевидные особенности вещественных чисел”:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
← →
Наиль ©
(2006-09-22 11:43)
[35]
> [15] arhis (21.09.06 17:12)
Я смотрю ты так и не удосужился разобраться с [12]+[14].
Показываю ещё раз
Твой вариантif (PrBuf-Int(PrBuf))=0 then break;
Правильный вариантUses Math
if IsZero(PrBuf-Int(PrBuf)) then break;
Посмотри устройство IsZero.
← →
han_malign ©
(2006-09-22 12:15)
[36]
> дебаггер мне радостно докладывает что у меня и там и там 23
– потому, что, те кто писал дебагер, в отличие от вас, знали об особенностях машинного представления чисел с плавающей точкой, и дебагер писали – в первую очередь, для тех кто знает… А для тупых – разразработчики VCL – написали FloatToStr, и ваша фраза “Да, моя религия мне не позволяет чисто математическую задачу решать чернез строки.” – не котируется, до тех пор, пока вы в этой “чисто математике” не разберетесь…
← →
arhis
(2006-09-22 12:48)
[37]
Наиль © (22.09.06 11:43) [35]
А я тебе еще раз говорю, что эта чертова погрешность не ноль.
han_malign © (22.09.06 12:15) [36]
Господа, у вас тут некоторые непонятности в масштабах происходящего. Судя по вашей сетевой активности все вы тут читали про закон дырявых абстракций. Если учесть что любой человек, который пишет в дельфях находится на самой вершине этой иерархии абстаракций, именно по этому я и пишу в дельфях, система должна была меня оградить от такой дыры прямо в фундаменте. Я, грешным делом, думал что так оно и есть. Что, по моему в полне очевидно, потому как этому самому королю горы абстракций, то есть мне, глубочайше все равно с какой погрешностью рассчитан этот ноль. И в какой системе он находиться, да хоть в десятичных остатках.
Теперь по поводу тупых. У моего учителя по математике была любимая поговорка – пускай рабы считают . Любой программист, это в первую очередь алгоритмист, и алгоритм и есть его цель, все остальное для рабов.
Простите меня за столь откровенный флуд, Ketmar © с утра так настроил.
В заключении хочу сказать спасибо Palladin © , который не стал выпендриваться и хоть как то закрыл мне эту дыру.
← →
Virgo_Style ©
(2006-09-22 13:21)
[38]
arhis (22.09.06 12:48) [37]
Господа, у вас тут некоторые непонятности в масштабах происходящего.
Плакал.
arhis (22.09.06 12:48) [37]
королю горы абстракций, то есть мне
Рыдал!!!)
← →
han_malign ©
(2006-09-22 13:40)
[39]
> Любой программист, это в первую очередь алгоритмист, и алгоритм
> и есть его цель, все остальное для рабов.
– а у любого землекопа единственная цель – копать землю, а то что непонятно как копать каменистую землю совковой лопатой, и на фиг тут лежит какой то с(т)ранный заступ – так это явно недоработка изготовителей – они и виноваты…
← →
han_malign ©
(2006-09-22 13:51)
[40]
> У моего учителя по математике была любимая поговорка – пускай рабы считают.
– а если название дисциплин – “Численные методы” и “Дискретная математика” – вызывают у вас недоумение, вам лень изачать иснтрументарий – то, для уровня ваших абстрактых амбиций, прекрасно подойтет Visual Basic Scripts в MSOffice…
“Microsoft – ты думаешь за нас”…