2016-02-01 2 views
4

У меня очень странное поведение от некоторых C# и Excel ...Почему .Net и Excel не согласны с этой математикой?

Сделав математику самостоятельно, я считаю, что excel может дать правильный ответ, но моя математика отличная, поэтому может быть, что .Net компилятор знает что-то, чего я не знаю.

Так вот мы идем ...

Учитывая эти данные в виде листа Excel:

total  sale val days irr 
2431.65 2424.56 21  5.01 

Формула для ВСД (ячейки D2) выглядит следующим образом:

=ROUND(100 * ((A2 - B2)/B2) * (360/C2), 2) 

Когда я запускаю этот C#, я получаю результат 4.97 ...

var totalIncludingTax = 2431.65M; 
var saleValue = 2424.56M; 
var daysRemaining = 21; 

var result = Math.Round(100.0m * ((totalIncludingTax - saleValue)/saleValue) * (360/daysRemaining), 2); 

Может ли кто-нибудь объяснить, как я могу заставить C#/.Net и Excel согласиться/как я могу переписать эту формулу, чтобы они согласились?

ответ

8
360/daysRemaining 

Это становится целочисленное деление в C#: 360/21 = 17, а не 17.14285714, как это будет в Excel.

Измените его на 360.0 /daysRemaining, чтобы сделать его плавающей точкой (или 360 м, как было указано).

+0

or (decimal) 360/daysРазмер – mybirthname

+0

Абсолютный кровавый гений !! – War

Смежные вопросы