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