singlepost

Деление в VBA.net << На главную или назад  

При делении 123.45/10 получается 12.3449993. никак не могу понять почему, и как это исправить?

4 ответов в теме “Деление в VBA.net”

  1. 4
    Антон Кононов ответил:

    у дельфи кажись в дробных числах есть мантисса и экспонента
    в справке набери в поиске "real" и там про это написано.

    мантисса, грубо говоря, это само это число, если точку переставить после первого знака (типа 1.2424, а не 12424)

    У дробных чисел (например double) в мантиссе 18 знаков (вроде так), а значит число 1.234567890123456789 равно как и число 1234567.890123456789 не может быть сохранено в этом (double) типе данных, потому что в представленных числах по 19 цифр (то есть при сохранении потеряется самая последняя цифра).

    В real в мантиссе примерно 8 знаков. То есть число 2/3 (две третьих) будет представлено в виде: 0.6666667

    экспонента задает смещение точки. В double числах это примерно 4500. То есть double может сохранять числа от 10^-4500 до 10^4500 (^ – это "в степени"). Опять таки примерно. Точно в справке

    К чему это я? хм… а вот как в бейсике я не знаю.

  2. 3
    Константин Кузнецов ответил:

    а каким образам тогда Delphi делит как положено?

  3. 2
    Жека Кирпичев ответил:

    Кстати, Константин, попробуй вывести на экран 123.45 еще ДО деления его на 10. И поэкспериментируй с выводом на экран различных чисел: 1, 1.5, 1.6, 1.25, 2.5, 0.05 и т.п.

  4. 1
    Жека Кирпичев ответил:

    Потому что в компьютере числа представляются в двоичной системе счисления. В данном случае – 32битные числа.
    12.3449993 – это самое близкое к 12.345 из всех 32-битных двоичных чисел с плавающей точкой. Представить 12.345 точно – невозможно.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.