Float қариб ҳеҷ гоҳ дақиқ нест
Float дар шакли дуӣ, тақрибан бо 16 рақами муҳим нигоҳ дошта мешавад. Аксари касрҳои даҳӣ, ҳатто 0.1, шакли дақиқи дуӣ надоранд, барои ҳамин хатои хурде пайдо мешавад:
Барои ҳамин ҳеҷ гоҳ float-ро бо == муқоиса накунед. Бипурсед, ки оё фарқ кофӣ хурд аст: abs(a - b) < 1e-9. Ададҳои бутун (int) дақиқанд, барои ҳамин барои онҳо == бехатар аст.
Хондан ва чопи float
Вақте дохилкунӣ метавонад қисми касрӣ дошта бошад, онро бо float() бихонед. Он 12.5 ва 4-и оддиро қабул мекунад. int("12.5") бо ValueError қатъ мешавад. Бигзор вуруд 10 5 бошад:
print(x) float-ро бо ҳамон қадар рақам нишон медиҳад, ки лозим аст, аксар вақт 16 ё 17. Барои интихоби шумораи рақамҳо f-сатр истифода баред: матне, ки пеш аз он f меояд ва дар он {x} бо қимати x иваз мешавад. Баъд аз ном :.2f маънои «дақиқан 2 рақам баъди нуқта»-ро дорад.
print(x): ҳамон қадар рақам, ки float лозим дорад.f"{x:.2f}": дақиқан 2 рақам баъди нуқта, бо сифрҳо.f"{x:.6f}": дақиқан 6 рақам.round(x, 2): яклухт мекунад, вале2.5-ро чоп мекунад, на2.50-ро.
Вақте масъала якчанд рақам баъди нуқта талаб кунад, ин шумораро дар f-сатр гузоред. Барои чоп round-ро истифода набаред: он сифрҳоро илова намекунад.
Яклухткунӣ
round() ба наздиктарин адади бутун яклухт мекунад, вале қимате, ки дақиқан дар мобайн аст, ба ҳамсояи ҷуфт меравад. Ин аз математикаи мактабӣ фарқ мекунад:
round(2.5)ваround(3.5)ба2ва4баробаранд: нимаҳо ба ҳамсояи ҷуфт мераванд.round(2.675, 2)ба2.67баробар аст, чунки 2.675 ҳамчун float андаке аз 2.675 пасттар нигоҳ дошта мешавад.math.floor(x + 0.5)ҳамеша нимаҳоро ба боло мефиристад.int(3.9)ба3ваint(-3.9)ба-3баробар аст: ба сӯи сифр.math.floor(-3.9)ба-4ваmath.ceil(3.2)ба4баробар аст: ба поён ва ба боло, ҳамеша.
Пас вақте масъала мегӯяд «ба наздиктарин адади бутун яклухт кунед, нимаҳо ба боло», math.floor(x + 0.5)-ро истифода баред. Вақте якчанд рақам баъди нуқта лозим аст, f-сатрро истифода баред.