Because game use floating-point types
Try this code (I use csc.exe (Microsoft (R) Visual C# Compiler version 4.7.3062.0))
using System;
namespace App
{
class Program
{
static void Main(string[] args)
{
double a=1 - 40*0.01f;
double b=1 - 20*0.01f;
Console.WriteLine("2000*0.6*0.8={0} ({1})",2000*a*b, Math.Ceiling(2000*a*b));
}
}
}
Result
2000*0.6*0.8=960,000019669533 (961)
Math.Ceiling - Returns the smallest integral value greater than or equal to the specified number.
But if double (Precision ~15-17 digits) replace to float (Precision ~6-9 digits) then we get 960