Ответ
MoKo 03.03.2013 04:37
Тут, к сожалению, дело не в парсере и не в OS X. Программа на C на любом x86 выведет то же самое. И две последние строки являются ключем к тому, почему так происходит.
#include "stdio.h"
int main(int argc, char *argv[]) {
double a=5611.075000;
double b=5611.0550;
printf("%.2f\n",a);
printf("%.2f\n",b);
printf("%.16f\n",a);
printf("%.16f\n",b);
}
Вывод:
5611.07
5611.06
5611.0749999999998181
5611.0550000000002910
Пара ссылок "на почитать":
http://www.perlmonks.org/?node_id=109360http://bugs.python.org/issue5118В качестве решения предлагается добавлять "маленькое число". Проблема в том, что величина этого epsilon зависит от размерности
используемых чисел. То есть если у вас в ходу числа до 1e9, а всего значащих чисел в double 15-16, то надо добавлять 0.000001
перед каждым преобразованием в строку...