Уменьшить число с плавающей запятой с 1 до 0 с шагом 0,01

Как указано в заголовке, я хотел бы начать с 1 и уменьшить на 0,01 до нуля.

Проблема в том, что я использую числа с плавающей запятой и продолжаю получать такие значения, как 0.5000000001.


person Ogen    schedule 08.05.2014    source источник
comment
Расскажите подробнее о том, чего вы пытаетесь достичь. возможно float не подходит для вашей задачи.   -  person Codor    schedule 08.05.2014
comment
0.01 не может быть представлен в двоичном формате с плавающей запятой, поэтому вы должны использовать вместо этого int   -  person phuclv    schedule 08.05.2014
comment
Это похоже на то, что int начинается с 25 и требуется уменьшить на 2.5 до 0. Это невозможно, потому что ваше значение декремента не представляется возможным, и когда вы приближаете его (чем-то, что можно представить), оно не делит ваше значение идеально.   -  person Mankarse    schedule 08.05.2014


Ответы (1)


Просто используйте int, начните с 100, уменьшите до 0 и разделите значение на 100.0

for (int i=100; i>=0; --i)
{    
    float f = i/100.0f;
    ...
}
person xMRi    schedule 08.05.2014
comment
Не то чтобы производительность была ограничена этими операциями, но, вероятно, будет быстрее использовать индекс с плавающей запятой i, понижающийся с 100.0f до 0.0f. Кроме того, обратите внимание, что float f = i/100.0; рискует заставить компилятор генерировать деление с двойной точностью с последующим преобразованием в одинарную точность. Объявление float f = i/100.0f; эквивалентно (по сложным причинам, которыми компилятор может не знать, как воспользоваться) и более простым для компиляции. - person Pascal Cuoq; 08.05.2014
comment
Спасибо большое, сработало как шарм. - person Ogen; 08.05.2014