2017-01-04 12 views
1

В отчете у нашего клиента может быть более 100 000 элементов, которые отмечены, а в метаданных отчета (xml-файл) требуется 2-десятичный процент от количества элементов были «проверены ОК».Процент никогда не будет 100%, если фактически фактически 100%

Однако число не должно быть 100%, если на самом деле все нормально. Из-за количества элементов стандартные математические операции и String.Format() могут выполнять эту ошибку округления.

Есть ли элегантное решение?

Клиент соглашается с тем, что 99,99% - это особый случай, который охватывает 99.999999999%, хотя он математически неверен.

Важно то, что данные отчета не показывают 100%, когда есть предметы, которые не проверяли нормально.

+0

Моя мысль вместо того, чтобы пропустить процент, передать предметы, сделанные + переданы так, если! = Тогда его никогда не будет 100 .. даже если он говорит, округлите и все такое. – BugFinder

+1

Если бы вы не использовали какой-либо пример кода или такой, если вы используете double как число, используйте вместо него десятичный знак (который не является типом числа с плавающей точкой). – Hypnobrew

+3

@ Hypnobrew: 'decimal' по-прежнему является типом с плавающей точкой. Это всего лишь десятичный тип с плавающей запятой, а не двоичный тип с плавающей запятой. –

ответ

2

Что случилось с небольшим вспомогательным методом?

public double GetPercentage(int checkedOk, int total) 
{ 
    if (checkedOk == total) 
     return 100.0; 

    var percentage = (100.0 * checkedOk)/total; 
    return percentage > 99.99 ? 99.99: percentage; 
} 

Я удалю магический номер '99 .99`, но вы получите эту идею.