NormalizeDouble (0.0123456, 2) => 0.0123456 Что за недоделки?

 

Я чего-то не понимаю или не правильно пользуюсь данный функцией обрезки числовых значений?

Почему функция число 0.0123456 не обрезает?

После работы функции

NormalizeDouble (0.0123456, 2)

Должны получмить 0.01, а не 0.0123456. То есть функция в каких-то моментах не работает?

 

 
Для печати нужно использовать DoubleToString.
 

Вы приводите на скриншоте один точный пример, а в тексте пишете совершенно некорретный совсем с другим числом и вводящим в заблуждение "результатом".

Наличие мелкого остатка в последнем разряде при операциях с вещественными числами объясняется методом представления этого числа в компьютерах. Дело в том, что вещественные числа хранятся в дискретном/приблизительном представлении. Посмотрите более детальное объяснение тут: http://book.kbsu.ru/theory/chapter4/1_4_13.html

На всякий случай - это касается любого языка программирования общего плана.

Глава 4 — Арифметические основы компьютеров
  • book.kbsu.ru
Стандартные форматы представления вещественных чисел: 1) одинарный  —  32-разрядное нормализованное число со знаком, 8-разрядным смещенным порядком и 24-разрядной мантиссой (старший бит мантиссы, всегда равный 1, не хранится в памяти, и размер поля, выделенного для хранения мантиссы, составляет только 23 разряда). 2) двойной  —  64-разрядное...
 
valeryk:
Для печати нужно использовать DoubleToString.
Спасибо, забыл о ней почему-то.
 
Renat:

Вы приводите на скриншоте один точный пример, а в тексте пишете совершенно некорретный совсем с другим числом и вводящим в заблуждение "результатом".

Наличие мелкого остатка в последнем разряде при операциях с вещественными числами объясняется методом представления этого числа в компьютерах. Дело в том, что вещественные числа хранятся в дискретном/приблизительном представлении. Посмотрите более детальное объяснение тут: http://book.kbsu.ru/theory/chapter4/1_4_13.html

На всякий случай - это касается любого языка программирования общего плана.

Благодарю.
Причина обращения: