#include <stdio.h>
#include <wchar.h>
int main()
{
double f = 1717.1800000000001;
wprintf(L"double %.20G\n", f);
return 0;
}
результаты (и ожидаемые ниже):
double 1717.1800000000000637
double 1717.1800000000001
Это в Ubuntu 11.10 x64 (но также и при компиляции для 32-битной версии).
Проблема, которую я пытаюсь решить, заключается в том, что в Windows он выводит число точно так же, как в коде, и мне нужно сделать низкоуровневое форматирование (swprintf), чтобы оно работало как в Windows, для проблем с переносимостью.
f
. Значение, хранящееся в f, равно 1717,180000000000063664629124104976654052734375. Проблема в том, что теперь Windows выводит только 17 значащих цифр, хотя было запрошено 20 (это известная ошибка, насколько я знаю, она где-то в их базе данных ошибок). Если вы не можете ограничить длину поля разумным значением (например, 17), вам нужна оболочка для имитации этой ошибки. - person Gunther Piez   schedule 29.02.2012