2015-09-08 10 views
-1

после умножения на 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

Проблемы Я считаю, что не была на округлении, но умножению.

+0

вы должны проверить это https://msdn.microsoft.com/en-us/library/system.midpointrounding(v=vs.110).aspx – Nic

+0

Для голосования не голосуйте. Возможно, вам понадобится округлить до 3 точности, а затем округлить до 2. double a = 39,3; double b = 0,95; Response.Write (Math.Round (Math.Round (a * b, 3), 2)); – Nic

+0

Спасибо за предложение. В этом случае мне повезло, потому что я никогда не знал точно, сколько точности мне нужно сделать первым, прежде чем я смогу обойти его до 2. На данный момент я просто ToString() и разберу его обратно, чтобы удвоить решить проблему. Но я действительно хотел бы знать, почему и какой-нибудь лучший/правильный метод разрешения. – Atlantiz8

ответ

0

Прежде чем я пойму, почему это может произойти. Я сделал себе обходной путь, возможно, мог помочь другим, если у них будет такая же проблема. В любом случае, он выглядит грязным.

double price = 39.3; 
double m = 0.95; 

double result = 39.3 * 0.95; 
result = double.Parse(result.ToString()); 

result = Math.Round(result, 2, MidpointRounding.AwayFromZero); 

Таким образом, я получаю 37.335 после умножения, и я получил 37.34 после округления до 2 десятичных знаков.