前端js正确进行加减乘除

在前端需要做浮点数的计算时,如果计算的地方很多的话,需要很精确的话,建议使用math.js这个插件库,非常好用,如果只有很少的几个计算,可以使用以下方法

math.js

下载:npm install mathjs --save
main.js引用并全局注册:
import * as math from 'mathjs'
Vue.prototype.$math = math
使用:加减乘除:add,divide,multiply,subtract
this.$math.add(
    <!--加数-->
    this.$math.number( // 这句话是为了返回时为数字格式
        this.$math.bignumber(a),
        this.$math.bignumber(b)
    )
)

 //加法函数,用来得到精确的加法结果
  //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  //调用:Add(arg1,arg2)
  //返回值:arg1加上arg2的精确结果
  function Add(arg1, arg2) {
    arg1 = parseFloat(arg1);
    arg2 = parseFloat(arg2);
    var r1, r2, m;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(100, Math.max(r1, r2));
    return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m;
  }
 
  //减法函数,用来得到精确的减法结果
  //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。
  //调用:Sub(arg1,arg2)
  //返回值:arg1减去arg2的精确结果
  function Sub(arg1, arg2) {
    arg1 = parseFloat(arg1);
    arg2 = parseFloat(arg2);
    var r1, r2, m, n;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2));
    //动态控制精度长度
    n = (r1 >= r2) ? r1 : r2;
    return ((this.Mul(arg1, m) - this.Mul(arg2, m)) / m).toFixed(n);
  }
 
  //乘法函数,用来得到精确的乘法结果
  //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  //调用:Mul(arg1,arg2)
  //返回值:arg1乘以arg2的精确结果
  function Mul(arg1, arg2) {
    arg1 = parseFloat(arg1);
    arg2 = parseFloat(arg2);
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try { m += s1.split(".")[1].length } catch (e) { }
    try { m += s2.split(".")[1].length } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
  }
 
  //除法函数,用来得到精确的除法结果
  //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
  //调用:Div(arg1,arg2)
  //返回值:arg1除以arg2的精确结果
  function Div(arg1, arg2) {
    arg1 = parseFloat(arg1);
    arg2 = parseFloat(arg2);
    var t1 = 0, t2 = 0, r1, r2;
    try { t1 = arg1.toString().split(".")[1].length; } catch (e) { }
    try { t2 = arg2.toString().split(".")[1].length; } catch (e) { }
    r1 = Number(arg1.toString().replace(".", ""));
    r2 = Number(arg2.toString().replace(".", ""));
    return this.Mul(r1 / r2 , Math.pow(10, t2 - t1));
  }

本文为CSDN博主「mo-d-r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41036393/article/details/109603265

好的,我可以使用 HTML、CSS 和 JavaScript 来完成这个任务。 首先,我们需要创建一个 HTML 文件来构建计算器的用户界面。代码如下: ```html <!DOCTYPE html> <html> <head> <title>简易计算器</title> <style> /* 样式表 */ </style> </head> <body> <!-- 计算器界面 --> <div class="calculator"> <div class="display"> <input type="text" id="result" disabled /> </div> <div class="buttons"> <button onclick="clearDisplay()">C</button> <button onclick="deleteDigit()">CE</button> <button onclick="insertSymbol('/')">÷</button> <button onclick="insertDigit(7)">7</button> <button onclick="insertDigit(8)">8</button> <button onclick="insertDigit(9)">9</button> <button onclick="insertSymbol('*')">x</button> <button onclick="insertDigit(4)">4</button> <button onclick="insertDigit(5)">5</button> <button onclick="insertDigit(6)">6</button> <button onclick="insertSymbol('-')">-</button> <button onclick="insertDigit(1)">1</button> <button onclick="insertDigit(2)">2</button> <button onclick="insertDigit(3)">3</button> <button onclick="insertSymbol('+')">+</button> <button onclick="insertDigit(0)">0</button> <button onclick="insertSymbol('.')">.</button> <button onclick="calculate()">=</button> </div> </div> <script> // JavaScript 代码 </script> </body> </html> ``` 在这个 HTML 文件中,我们创建了一个 `div` 元素,用于包含整个计算器的用户界面。界面分为两部分:显示区域和按钮区域。显示区域使用一个 `input` 元素来显示计算结果,这个元素是禁用的,因此用户无法手动修改结果。 按钮区域包含多个按钮,每个按钮都有一个点击事件处理函数。这些函数负责将按钮的文本内容插入到计算器的显示区域中,或执行相应的计算操作。 现在,我们需要添加一些 CSS 样式来美化计算器的外观。代码如下: ```css .calculator { width: 300px; margin: 50px auto; border: 1px solid #ccc; border-radius: 5px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); } .display { padding: 10px; background-color: #f5f5f5; border-top-left-radius: 5px; border-top-right-radius: 5px; } .display input { width: 100%; font-size: 24px; border: none; text-align: right; } .buttons { display: grid; grid-template-columns: repeat(4, 1fr); grid-gap: 5px; padding: 10px; background-color: #eee; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; } button { width: 100%; height: 50px; font-size: 24px; border: none; border-radius: 5px; background-color: #fff; box-shadow: 0 0 2px rgba(0, 0, 0, 0.1); transition: background-color 0.2s ease-in-out; } button:hover { background-color: #f5f5f5; } button:active { box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.1); } ``` 这些样式定义了计算器的整体外观,包括边框、阴影、背景色、文本样式等。 最后,我们需要添加一些 JavaScript 代码来实现计算器的功能。代码如下: ```javascript // 获取显示结果的 input 元素 const result = document.getElementById('result'); // 存储当前表达式的数组 let expression = []; // 插入数字或小数点 function insertDigit(digit) { expression.push(digit); updateDisplay(); } // 插入运算符 function insertSymbol(symbol) { expression.push(symbol); updateDisplay(); } // 删除最后一个数字或运算符 function deleteDigit() { expression.pop(); updateDisplay(); } // 清空显示区域和表达式 function clearDisplay() { expression = []; updateDisplay(); } // 更新显示结果 function updateDisplay() { result.value = expression.join(''); } // 执行计算操作 function calculate() { // 将表达式转换为字符串 const str = expression.join(''); try { // 使用 eval 函数计算结果 const res = eval(str); result.value = res; // 更新表达式为计算结果 expression = [res]; } catch (err) { // 处理计算错误 result.value = 'Error'; expression = []; } } ``` 这些 JavaScript 函数用于处理用户操作,包括插入数字和运算符、删除数字、清空显示区域和表达式、更新显示结果以及执行计算操作。其中,计算操作使用 `eval` 函数来计算表达式的结果,如果出现错误则显示错误信息。 现在,我们就完成了一个简易的计算器,可以执行加减乘除四则运算并得到正确的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值