Перейти к содержимому

Фотография

Некорректное сложение чисел


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 kazachis4e

kazachis4e

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 14 февраля 2011 - 13:49

Здравствуйте.
Используется TestComplete 8.10 Demo, JScript

Подскажите, пожалуйста, это есть баг или я что-то не правильно делаю?

Код:
Log.Message(250 - 255.55);

Результат:
Type Message Time Priority Has Picture Link
-5,55000000000001 16:46:49 Normal

На самом деле все эти числа содержаться в переменных, они кучу раз переводятся из одного типа в другой, потом что-то берется по модулю и т.п. но это не важно, ибо косяк виден уже на таком примере. При дальнейшей работе эта лишняя единичка очень портит жизнь. Никто с таким не сталкивался? На сколько я понял проявляется такое только если сотая часть числа равна 5, и то не всегда.
  • 0

#2 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 14 февраля 2011 - 15:04

Это стандартная проблема при работе с числами с плавающей запятой. Погрешности возникают из-за особенностей представления таких чисел в компьютере. Вот здесь показано, как правильно работать работать с такими числами.
  • 0

#3 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 14 февраля 2011 - 16:00

Строка
Log.Message(aqString.Format("%g",250 - 255.55))
даст в Message то, что Вам нужно, т.е. -5,55

Если смотреть через Evaluate значение s:
s = 250 - 255.55
, то оно равно -5,55.

А вот
s2 = aqConvert.FloatToStr(250 - 255.55)
дает s2 = -5,55000000000001

Но почему aqConvert.FloatToStr и форматное преобразование "g" не равны, это хороший вопрос !!
  • 0

#4 SALar

SALar

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 298 сообщений
  • Город:Москва


Отправлено 15 февраля 2011 - 07:23

Этой проблеме сто лет в обед. Решение описано еще вот в этой древней, как восьмидюймовые дискеты книге: http://www.libex.ru/...ook109519.html.

Кстати, книгу вполне можно почитать и сейчас.
  • 0

-- 

Сергей Мартыненко

Блог 255 ступеней (байки для оруженосца)

facebook (Дети диаграммы Ганта)

ВебПосиделки клуба имени Френсиса Бэкона 

 



Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных