Си++ тип float (давно хотелось спросить, чо за фигня)

markyzz

тупой, конечно, вопрос... но у меня слегка внутреннее напряжение, когда на вот такой код:

float a = 2.3;
ShowMessage(FloatToStr(a;

он выдает: 2.29999995231628
и так со всеми флоатами
в общем хз... из-за чего такая фигня происходит и, может как-то избавиться от нее можно?
раздражает... :(
Никто не знает?

alfadred

Как float в памяти представляется?
В двоичном виде, мантисса*2^экспонента
Соответственно, мантисса округляется по степеням двойки, а не десятки:
3/10 = 0.0(1001) ~ 0.10011001100110011001100 * 2^(-1) = 0.2999999523162842

okis

это сибилдер :o Используй FloatToStrF, тогда округлится как надо.

markyzz

ага, спасибо!

yolki

используй double.
у них 16 значащих цифр, для повседневных задач хватает (float-а - не хватает).
и да, FloatToStr(F) - это буэ. sprintf наше всё :)
Оставить комментарий
Имя или ник:
Комментарий: