Я подозреваю, что первая часть ошибочной попытки обеспечить nValue не превышает nLimit. Это, возможно, должно быть
if (nValue + 0.01 > nLimit)
nValue = nLimit - 0.01;
Другими словами, если nValue ближе, чем 0,01 до предела сделать 0,01 меньше, чем предел
Чтобы объяснить, как работает вторая часть, она включает в себя делящие число с плавающей запятой на целую часть числа. Если число является целым числом, тогда результат будет равен 1
например.
23.00/23 = 1 - It's an integer
23.05/23 = 1.002 - It's not an integer
Добавление 1 в каждую сторону (как ufukgun заметил), чтобы предотвратить разделим на ноль, но DeVision является излишним, как вы могли бы просто сравнить поплавок с Int
if (nValue == (int)nValue)
Это должно быть специфично для вашей инфраструктуры и требований. – ckv
Что представляет собой 'nValue'? – detly
Ненавижу, когда люди используют поплавки, чтобы представлять деньги ... Я бы не хотел быть тем парнем, которому предъявлено иск, потому что он все еще имеет 0,01 лет после одного платежа из-за неясных ошибок округления ... –