تحدث أخطاء النقطة العائمة عند تشغيل الضرب العشري في JS.
<script>
تنبيه (11*22.9)
</script>
كانت النتيجة 251.8999999999998 بدلاً من 251.9
يجب أن يكون هناك العديد من الصداع. فكيف تحلها؟ هنا ، يتم إعطاء الحل.
1 ،
نسخ رمز رمز على النحو التالي:
<script>
تنبيه (11*(22.9*10)/10) ؛
</script>
الفكرة التقريبية لحل المشكلة هي أن العامل يتم توسيعه إلى عدد صحيح أولاً ، وأخيراً مقسومًا على المضاعف المقابل ، بحيث يمكن الحصول على النتيجة الصحيحة.
2 ،
نسخ رمز رمز على النحو التالي:
<script defer>
number.prototype.raate = function () {
var os.toString () ؛
if (ostr.indexof (".") ==-1)
العودة 1 ؛
آخر
Return Math.Pow (10 ، parseint (Osr.Length-Organ.indexof (".") ؛
}
وظيفة trans () {
args = trans.arguments ؛
اختبار var = 1 ؛
لـ (i = 0 ؛ i <args.length ؛ i ++)
temp*= args [i]*args [i] .Raate () ؛
لـ (i = 0 ؛ i <args.length ؛ i ++)
temp/= args [i] .Raate () ؛
عودة درجة الحرارة
}
تنبيه (Trans (11،22.9)) ؛
</script>
هذا الحل هو طريقة أكثر إثارة للقلق ، ولكنه يمكن أن يجعلك ربما تفهم العملية الفعلية لحل هذه المشكلة.
يمكنك أيضًا استخدام طريقة أربع منازل وخمس طرق واردة. .
نسخ رمز رمز على النحو التالي:
وظيفة Fordight (dight ، كيف) {
dight = math.round (dight*math.pow (10 ، how))/math.pow (10 ، how) ؛
إرجاع اللقمة.
}
// باستثناء طريقة الحصول على الطريقة الدقيقة لإزالة الطريقة
// الوصف: سيكون لنتائج JavaScript خطأ ، وسيكون من الواضح عند إزالة أرقام نقطة العائمة. هذه الوظيفة تُرجع نتيجة إزالة أكثر دقة.
// call: accdiv (Arg1 ، Arg2)
// قيمة الإرجاع: Arg1 باستثناء النتائج الدقيقة لـ Arg2
وظيفة accdiv (arg1 ، arg2) {{
var t1 = 0 ، t2 = 0 ، r1 ، r2 ؛
حاول {t1 = arg1.toString ().
حاول {t2 = arg2.tostring ().
مع (الرياضيات) {
R1 = الرقم (Arg1.ToString (). استبدال ("." ، "")))
R2 = الرقم (Arg2.ToString (). استبدال ("." ، ""))
العودة (R1/R2)*POW (10 ، T2-T1) ؛
}
}
// إضافة طريقة div إلى نوع الرقم ، وهو أكثر ملاءمة للاتصال.
number.prototype.div = function (arg) {
إرجاع accdiv (هذا ، arg) ؛
}
// وظيفة الضرب للحصول على نتائج مضاعفة دقيقة
// الوصف: سيكون لنتائج نتائج تكاثر JavaScript خطأ ، وسيكون من الواضح عندما يتم ضرب أرقام النقطة العائمة. هذه الوظيفة تُرجع نتيجة تكاثر أكثر دقة.
// call: 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 (".
}
// أضف طريقة MUL إلى نوع الرقم ، وهو أكثر ملاءمة للاتصال.
number.prototype.mul = function (arg) {
إرجاع accmul (arg ، هذا) ؛
}
// إضافة طريقة للحصول على نتائج إضافية دقيقة
// الوصف: سيكون لنتائج JavaScript خطأ ، وسيكون أكثر وضوحًا عند إضافة أرقام نقطة العائمة. هذه الوظيفة تُرجع نتيجة أكثر دقة للإضافة.
// Call: Accidd (Arg1 ، Arg2)
// قيمة الإرجاع: Arg1 بالإضافة إلى النتائج الدقيقة لـ Arg2
وظيفة Acadd (Arg1 ، Arg2) {{
var R1 ، R2 ، M ؛
حاول {r1 = arg1.toString ().
حاول {r2 = arg2.toString ().
M = Math.Pow (10 ، Math.Max (R1 ، R2))))
العودة (Arg1*M+Arg2*M)/M.
}
// إضافة طريقة إضافة إلى نوع الرقم ، وهو أكثر ملاءمة للاتصال.
number.prototype.add = function (arg) {
Return Acadd (Arg ، this) ؛
}