У меня есть проблема, которая в настоящее время немного сбивает меня с толку.
Вот немного предыстории: мы находимся в процессе обновления веб-приложения asp.net 2.0 до .net 4 на 64-битном сервере.У нас есть тестовое приложение, развернутое как на новом, так и на старом серверах, чтобы убедиться, что все работает, как и ожидалось, прежде чем мы начнем работу;оба из которых указывают на одну и ту же базу данных на другом сервере.
Вот проблема:
double totalGross;
double totalNet = 9999999.00;
float taxRate = 15.00f;
totalGross = totalNet * (1 + (taxRate / 100));
На старом сервере .ToString () на totalGross создает: 11499998.85
На новом сервере .ToString () на totalGross выдает: 11499998.6115814
В настоящее время затрудняется выяснить, почему это может быть?Последнее значение даже не представляет первое число без округления?
Кстати, я не придумываю способы исправить / улучшить код ... только после возможных причин, почему это могло произойти!
Обновление
Я создал консольное приложение и построил его на x86 и x64, запустил обе версии на сервере и вывел две разные цифры.Так что, на самом деле, при использовании double, похоже, что это потеря некоторой точности между 32 и 64 битами.Меня действительно удивляет, что «потеря точности, о которой идет речь, равна 0,2, это не кажется мне таким точным и какая разница ?!Как кто-то предложил, вероятно, лучше использовать десятичный тип (в свою защиту я не писал этот код: P)