после умножения на 2 двойника, он получает так много дополнительной точности. Затем он вызывает округление (до 2 десятичных). Где я должен получить 37.34, но вместо этого он дает 37.33. (Просмотр в режиме отладки)C# double multiply получает дополнительную точность
additional precision http://s8.postimg.org/9nn2bbiab/precision.jpg
Любая идея, почему? и как решить?
EDIT
я на самом деле пытался MidpointRounding. Попробуйте это на любом калькуляторе, он должен дать вам ровно 37.335 Но C# дал мне 37.334999999999, что позже приводит к неправильному ответу после округления с 2 десятичными знаками.
still rounded wrongly http://s28.postimg.org/psi2dz59n/precision2.jpg
Проблемы Я считаю, что не была на округлении, но умножению.
вы должны проверить это https://msdn.microsoft.com/en-us/library/system.midpointrounding(v=vs.110).aspx – Nic
Для голосования не голосуйте. Возможно, вам понадобится округлить до 3 точности, а затем округлить до 2. double a = 39,3; double b = 0,95; Response.Write (Math.Round (Math.Round (a * b, 3), 2)); – Nic
Спасибо за предложение. В этом случае мне повезло, потому что я никогда не знал точно, сколько точности мне нужно сделать первым, прежде чем я смогу обойти его до 2. На данный момент я просто ToString() и разберу его обратно, чтобы удвоить решить проблему. Но я действительно хотел бы знать, почему и какой-нибудь лучший/правильный метод разрешения. – Atlantiz8