darsga qaytish

Nima uchun 6.35.toFixed(1) == 6.3?

Math.round va toFixed hujjatlari bo’yicha ikkala raqam ham eng yaqin raqamga qadar: 0..4 pastga, 5..9 esa yuqoriga ko’tariladi.

Masalan:

alert((1.35).toFixed(1)); // 1.4

Quyidagi o’xshash misolda nima uchun 6.35 6.4 ga emas, 6.3 ga yaxlitlangan?

alert((6.35).toFixed(1)); // 6.3

6.35 ni qanday qilib to’g’ri yo’l bilan yaxlitlash kerak?

Ichki o’nlik kasr 6.35 cheksiz ikkilikdir. Bunday holatlarda har doimgidek, u aniqlikni yo’qotish bilan saqlanadi.

Ko’raylikchi:

alert((6.35).toFixed(20)); // 6.34999999999999964473

Aniq yo’qotish raqamning ko’payishiga va kamayishiga olib kelishi mumkin. Bunday holda, raqam biroz kichikroq bo’lib qoladi, shuning uchun u yaxlitlanadi.

1.35 uchun nima?

alert((1.35).toFixed(20)); // 1.35000000000000008882

Bu erda aniq yo’qotish raqamni biroz kattaroq qildi, shuning uchun u yaxlitlandi.

6.35 bilan qanday qilib muammoni hal qilishimiz mumkin, agar u to’g’ri yo’lga aylantirilishini xohlasak?

Yaxlitlanishdan oldin uni butun songa yaqinlashtirishimiz kerak:

alert((6.35 * 10).toFixed(20)); // 63.50000000000000000000

E’tibor bering, 63.5 hech qanday aniq yo’qotishlarga ega emas. Buning sababi, 0,5 kasr qismi aslida 1/2 dir. 2 kuchlariga bo’linadigan qismlar ikkilik tizimda to’liq ifodalanadi, endi biz uni yaxlitlashimiz mumkin:

alert(Math.round(6.35 * 10) / 10); // 6.35 -> 63.5 -> 64(yaxlitlangan) -> 6.4