Visual Studio 2008 sp1 — Как вычислить двойную переменную с точностью до десятичной дроби в переполнении стека

Я собираюсь вычислить двойной тип с точностью до десятичного знака. конечно, я надеюсь, что у результата есть та же десятичная точность. Однако, это не работает, только 6 десятичных знаков возможны в VS2008. Есть ли какая-то причина или идея?

double dMag = 10;
double dPixelSize = 4.4;
double PixelWidth = 1024/2;
double PixelHeight = 768/2;
double umtomm = 1000;

double origin_PosX = 813.227696;
double origin_PosY = 676.195748;

double PosX = (origin_PosX - PixelWidth) * dPixelSize / dMag / umtomm;
double PosY = (origin_PosY - PixelHeight ) * dPixelSize / dMag / umtomm;

Если я проверю PosX и PosY, то результаты будут «0.132540, 0.128566» соответственно. Я ожидаю, что результаты «0.13254018624000002, 0.12856612912» соответственно.

Спасибо

0

Решение

Из того, что я понимаю, вы путаете несколько вещей …

Точность double это больше, чем просто 6 знаков после запятой. Я настоятельно рекомендую прочитать эта статья в википедии который объясняет, как основной double Тип данных хранит ваш номер и объясняет его точность.

Точность, которая печатные по умолчанию ограничено 6 знаками после запятой. Чтобы это исправить, вам нужно научиться пользоваться строка формата.

В ваших комментариях вы упомянули использование

tmp1.Format("%f,%f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1));

распечатать строки.

Попробуйте изменить эту строку на

tmp1.Format("%.10f,%.10f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1));

и вы увидите, что он будет печатать 10 цифр после десятичной точки.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]