资讯详情

JavaScript分数比较:交叉相乘与BigInt输入校验

📅 2026/10/15 19:37:10 | 华诺云谱 👁 阅读
JavaScript分数比较:交叉相乘与BigInt输入校验
做分数比较练习时不能只比较分子也不能只比较分母。1/2与2/4相等3/4大于1/2尽管它的分母更大。鼓捣星球的分数披萨把分数画成可操作的图形支持2至8等份、点取与退回、、、比较和每局10题练习。历史最佳成绩与用时保存在本机可清除。下面单独讨论比较函数代码是独立教学示例不是该作品源码。对于分母都为正的a/b与c/d比较ad和cb即可。乘以同一个正数b*d不会改变大小方向因此无需先计算两个小数。遇到负分母先同时改变分子和分母的符号把分母转为正数。JavaScript实现还要决定输入规则。下面接受BigInt或Number安全整数统一转成BigInt后再相乘。拒绝小数、字符串、NaN、Infinity和不安全的Number整数分母为0直接报错。functiontoInteger(value){if(typeofvaluebigint)returnvalue;if(typeofvaluenumberNumber.isSafeInteger(value)){returnBigInt(value);}thrownewTypeError(只接受BigInt或Number安全整数);}functioncompareFractions(a,b,c,d){[a,b,c,d][a,b,c,d].map(toInteger);if(b0n||d0n){thrownewRangeError(分母不能为0);}if(b0n){a-a;b-b;}if(d0n){c-c;d-d;}constlefta*d;constrightc*b;returnleftright?:leftright?:;}console.log(compareFractions(1,2,2,4));// console.log(compareFractions(1n,3n,1n,4n));// console.log(compareFractions(1,-2,1,4));// 先检查安全整数再转换是为了避免把已经失真的Number当成精确输入。两个安全整数的乘积可能越过Number安全范围统一使用BigInt则避免这一步的整数精度问题。两种类型不能随意混在算术运算中代码因此先统一输入类型。MDN Number.isSafeInteger、MDN BigInt这个函数只比较两个有理数既不解析用户表达式也不计算披萨面积。1/2与2/4的数值相等与它们分别描述哪一张披萨无关若要比较实际所取的面积还须结合各自整体的大小。检查时应保留相等、正负号、零分子、零分母和不安全整数等情况。若输入来自表单解析与比较分开空字符串不能默默变成零。转换失败应提示输入问题不要把错误数据继续送去比较。代码也没有限制分子必须小于分母可以处理假分数和负数这属于独立比较函数的范围不是对工具出题范围的描述。实际做披萨图形时还要按练习目标决定允许哪些输入。展示给用户时比较结果可以用textContent写入页面。练习题的图形也应准确体现等分与取份不能用不等大的扇形暗示每块都是同一种单位份。本文由鼓捣星球整理AI辅助编辑。#JavaScript #数学工具 #鼓捣星球
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑