js除法的思考

一、问题的由来

今天在用JavaScript实现一个 四则运算的示例的时候,遇到的问题
整体的思路:
利用 prompt 获取到值;和操作符;结合 if else 进行判断
这里有两个坑
1.获取到的值的类型,能否直接进行 运算
2.进行除法运算的精度的问题

代码如下

<script type="text/javascript">
        var firstValue = prompt("请输入第一个数:");
        var operator = prompt("请输入运算符 (+  -  *  /)");
        var secondValue = prompt("请输入第二个数:");
        // 运算之前需要做类型转换
        var f = Number(firstValue);
        var s = Number(secondValue);

        // var f = parseFloat(firstValue);
        // var s = parseFloat(secondValue);

        document.write(typeof (f));
        document.write(typeof (s));

        function count() {
            if (operator == "+") {

                return f + s;
            } else if (operator == "-") {
                return f - s;
            } else if (operator == "*") {
                return f * s;
            } else if (operator == "/") {
        //============================================================================================
                // return f / s;
                return division(f, s);
       //============================================================================================
            } else {
                // 做异常处理

            }
        }

        function division(arg1, 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) {
            }
            with (Math) {
                r1 = Number(arg1.toString().replace(".", ""));
                r2 = Number(arg2.toString().replace(".", ""));
                return (r1 / r2) * pow(10, t2 - t1);

            }
        }

        document.write("运算的式子是  " + firstValue + " " + operator + " " + secondValue + " = " + count());
    </script>

直接使用return f / s; 出现的错误如下

在这里插入图片描述
在这里插入图片描述
直接返回 0.6/0.2的时候
预计的结果 是 3 但是实际得到的结果是 2.9999999999…
但是 0.6/0.3 的时候可以得到 2
这就涉及到了精度的问题
解决问题的思路
1.分离操作数的 整数部分和小数部分,得到小数部分的长度
2.乘以 10 的次方,是的两个操作数都变成整数
3.相除
这样就可以转换成 整数的相除

这里还有一个疑问
todo…
为什么 0.6/0.2 不正常
但是 0.6/0.3正常。。。。。。。。。

调整 return division(f, s); 之后,解决

JS中with()的用法

with 语句 为一个或一组语句指定默认对象。
用法:with (<对象>) <语句>;

示例

with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);

当使用 with 语句时,代码变得更短且更易读:
with (Math) {
x = cos(3 * PI) + sin(LN10); y = tan(14 * E); }

发布了52 篇原创文章 · 获赞 11 · 访问量 2487

猜你喜欢

转载自blog.csdn.net/weixin_41705396/article/details/103833366
今日推荐