ประเภท Floating -Point ใน JS เป็นอย่างไร?
ตัวอย่างเช่น: var a = 0.69;
ฉันต้องการได้รับ 6.9 โดยตรงเพื่อเขียน var c = a*10;
การแจ้งเตือน (c);
เมื่อคุณค้นหาออนไลน์ชาวเน็ตบางคนบอกว่านี่เป็นข้อบกพร่องในการคำนวณ JS Floating -Point และพบวิธีแก้ปัญหา:
วิธีที่ 1: JS Custom Function
คัดลอกรหัสรหัสดังนี้:
<script>
// เพิ่มวิธีการเพื่อรับผลลัพธ์เพิ่มเติมที่ถูกต้อง
// คำอธิบาย: ผลลัพธ์ของ JavaScript จะมีข้อผิดพลาดและมันจะชัดเจนมากขึ้นเมื่อเพิ่มหมายเลขจุดลอยตัวทั้งสอง ฟังก์ชั่นนี้ส่งคืนผลลัพธ์ที่แม่นยำยิ่งขึ้นของการเพิ่ม
// โทร: accidd (arg1, arg2)
// ค่าส่งคืน: arg1 บวกผลลัพธ์ที่แม่นยำของ arg2
Function Acadd (Arg1, Arg2) {{
var r1, r2, m;
ลอง {r1 = arg1.toString ()
ลอง {r2 = arg2.toString ()
m = math.pow (10, math.max (r1, r2)))))
return (arg1*m+arg2*m)/m
-
// เพิ่มวิธีเพิ่มวิธีการประเภทหมายเลขซึ่งสะดวกกว่าในการโทร
number.prototype.add = function (arg) {
Return Acadd (arg, this);
-
// เพิ่มวิธีการเพื่อรับผลลัพธ์เพิ่มเติมที่ถูกต้อง
// คำอธิบาย: ผลลัพธ์ของ JavaScript จะมีข้อผิดพลาดและมันจะชัดเจนมากขึ้นเมื่อเพิ่มหมายเลขจุดลอยตัวทั้งสอง ฟังก์ชั่นนี้ส่งคืนผลลัพธ์ที่แม่นยำยิ่งขึ้นของการเพิ่ม
// โทร: accidd (arg1, arg2)
// ค่าส่งคืน: arg1 บวกผลลัพธ์ที่แม่นยำของ arg2
ฟังก์ชั่น accsub (arg1, arg2) {{
var r1, r2, m, n;
ลอง {r1 = arg1.toString ()
ลอง {r2 = arg2.toString ()
m = math.pow (10, math.max (r1, r2));
// แก้ไขล่าสุดโดย deeka
// ความยาวความแม่นยำของการควบคุมแบบไดนามิก
n = (r1> = r2)?
return ((arg1*m-rg2*m)/m) .tofixed (n);
-
// ยกเว้นวิธีการที่จะได้วิธีการลบวิธีการที่แม่นยำ
// คำอธิบาย: ผลลัพธ์ของ JavaScript จะมีข้อผิดพลาดและมันจะชัดเจนเมื่อลบตัวเลขสองจุดลอยตัว ฟังก์ชั่นนี้ส่งคืนผลลัพธ์การกำจัดที่แม่นยำยิ่งขึ้น
// โทร: accdiv (arg1, arg2)
// ค่าส่งคืน: arg1 ยกเว้นผลลัพธ์ที่ถูกต้องของ arg2
ฟังก์ชั่น accdiv (arg1, arg2) {{
var t1 = 0, t2 = 0, r1, r2;
ลอง {t1 = arg1.toString ()
ลอง {t2 = arg2.toString ()
ด้วย (คณิตศาสตร์) {
r1 = number (arg1.toString (). แทนที่ (".", ""))
r2 = number (arg2.toString (). แทนที่ (".", ""))
return (R1/R2)*POW (10, T2-T1);
-
-
// เพิ่มเมธอด div ลงในประเภทหมายเลขซึ่งสะดวกกว่าในการโทร
number.prototype.div = function (arg) {
return accdiv (this, arg);
-
// ฟังก์ชั่นการคูณเพื่อให้ได้ผลลัพธ์การคูณที่แม่นยำ
// คำอธิบาย: ผลลัพธ์ของผลลัพธ์การคูณ JavaScript จะมีข้อผิดพลาดและจะชัดเจนเมื่อตัวเลขสองจุดลอยตัวถูกคูณ ฟังก์ชั่นนี้ส่งคืนผลลัพธ์การคูณที่แม่นยำยิ่งขึ้น
// โทร: Accmul (Arg1, Arg2)
// ค่าส่งคืน: Arg1 ถูกคูณด้วยผลลัพธ์ที่ถูกต้องของ Arg2
ฟังก์ชั่น accmul (arg1, arg2)
-
varm M = 0, s1 = arg1.toString (), s2 = arg2.toString ();
ลอง {m+= s1.split (".") [1] .length} catch (e) {}
ลอง {m+= s2.split (".") [1] .length} catch (e) {}
หมายเลขส่งคืน (s1.replace (".", "")*หมายเลข (s2.replace (".", "") /math.pow (10, m)
-
// เพิ่มวิธี MUL ลงในประเภทหมายเลขซึ่งสะดวกกว่าในการโทร
number.prototype.mul = function (arg) {
คืนค่า accmul (arg, this);
-
var a = 0.69;
var b = 10;
การแจ้งเตือน (a*b);
การแจ้งเตือน ((a*100)/10);
</script>
เพียงแค่เรียกฟังก์ชั่นโดยตรง
วิธีที่ 2: หากคุณทราบจำนวนตัวเลขทศนิยมคุณสามารถพิจารณาจำนวนหมายเลขลอยตัวที่น่าเบื่อของจำนวนเต็ม (ในที่สุดก็หารหลายตัวที่สอดคล้องกัน) จากนั้นทำการดำเนินการ
การแจ้งเตือน (11*22.9);
การแจ้งเตือน (11*(22.9*10)/10);