游戏测试 node.js 系列学习 基本运算

陈子昂 · 2018年04月30日 · 最后由 陈子昂 回复于 2018年05月01日 · 3485 次阅读

基本运算

5.1 劳动节,第一部分介绍加,减,乘,除法,余数和正整数面对函数的基础。

//基础运算符
function add(x, y) {
    return x + y + 1;
}
console.log(add(5, 6));

function sub(x, y) {
    return x - y;
}
console.log(sub(5, 6));

function mult(x, y) {
    return x * y;
}
console.log(mult(5, 6));

function dev(x, y) {
    if (y !== 0) {
        return (x / y);
    }
    return 0;//处理异常
}
console.log(dev(7, 3).toFixed(4)); //保留小数点后4位.toFixed(4)

function rem(x,y) {
    if(x<y){
        return x
    }
    return x%y
}
console.log(rem(3,8));

function abs(x) { //int带符号的整数,把符号强制变成+
    if (x >= 0) {
        return x;
    }
    else {
        return -x;
    }
}
console.log(abs(-5)); //5

function calc(x,y,z,w){   //根据公式封装的
    return (x+Math.pow(y,z))/w; // (x+y^z)/w  //Math计算库
}
console.log(calc(5,6,3,7).toFixed(4));//31.5714

var s2 ="test",n=1,m=true,t =false;//true也可以等于1
console.log(n+m,(n+m)*t);//2,0 false等于0

js rem()里面的if(x<y)可以不写,只是介绍概念,余数计算第一个数<第二个数,则余数为第一个数。
js dev()里面的toFixed(num)比return里使用更灵活,建议和现在一样放在打印里面。
js dev()如果第二位是 0,相除会显示 Infinity 无穷大,不会抛错,这里做了处理,第二位是 0,直接返回 0
node.js 还存在精度问题,0 舍得 1 入,0.1+0.2 相加不会得到 0.3 而是下面的。如果是做要求数据精度的,还是要使用科学计算库,这个后续会写到

var a =0.1;
var b =0.2;
console.log(a+b); //0.30000000000000004
console.log((a+b).toFixed(1));//不倒入其他库的做法,简单运算时只有这组有问题

场景应用

下面这段代码,衍生用于统计 toal 出来后,用一定范围的部分去除以总数拿到百分比。一般类型是数字或者数字返回是字符串类型的,所以这里做了个转换。
英文字符等其他特殊字符不支持直接转换成 ascii 对应的数字,这里目前不做展示。

/* 返回一组参数(数字和数字相关的字符串),如果不是int的先转换成int,返回最大的一个int
 * hard是指最大的数字
 * total等于转换后的之和
 * 最后结果%保留小数点后2位的精度
 * */
function pct(t1, t2, t3) {
    var hard = 0; //赋予初始
    const total = parseInt(t1) + parseInt(t2) + parseInt(t3);
    var t1_num = parseInt(t1);//修改类型支持t1 =parseInt(t1),但最好是换个对象
    var t2_num = parseInt(t2);
    var t3_num = parseInt(t3);
    //思路代码 工程里这样写显然是不行的
    if (t1_num > t2_num) { //parseInt转换成Int
        if (t1_num > t3_num) {
            hard = t1;
            //console.log(hard) //测试调式
        }
    }
    if (t2_num > t1_num) { //parseInt转换成Int
        if (t2_num > t3_num) {
            hard = t2;
        }
    }
    if (t3_num > t1_num) { //parseInt转换成Int
        if (t3_num > t2_num) {
            hard = t3;
        }
    }
    console.log((hard / total).toFixed(2) + " %")
}
pct("10","6","4"); //0.50 %

代码写得比较繁琐,主要是理解思路。最后在看一组,计时器的运算 (++,--)

/* a<10的话返回a,a>10则每次--a
 * 可以写成嵌套多层的来熟悉运行构造。电脑演算也是迭代计算。
 * */

function timer(a) {
    if (a < 10) { //先满足条件的返回 一种条件表达式的写法
        return a
    } else {
        a = --a; //a=15 第一次减1
    }
    if (a > 10){ //处理不满足条件的返回
        a = --a; //a=15 第二次减1
        return a
    }
}
console.log(timer(15)); //a=13

可能也就是休息日有时间写了。以下是 5.1 日补充的部分。
对于地板数和重新赋值的了解。注意:js 的变量是无类型的,允许重新赋值;floor() 这段代码无实际意义,floor 会丢失精度,除非做最后一步运算。

function floor(x, y) { //往下取整
    return Math.floor(x, y);
}
console.log(floor(3.5 + 2.1));

var a = 0;
a = ([a, a + 1, a + 2, a + "h"]); //允许重新赋值
console.log(a.sort()); //a.sort进行排序 [ 0, '0h', 1, 2 ]

通过构造函数的运算,把一些简单的代码知识点串联到相对正式的写法中,如果你看了前面的 JS 文章会对这个有更好的理解。

function PMath(x, y) {//构造函数大写字母 ES6 class
    this.x = x;//函数参数存储为对象的属性
    this.y = y;
}

var p = new PMath(6, 7);
PMath.prototype.sum = function () {
    return this.x + this.y;
};
console.log(p.sum());

PMath.prototype.sqrt = function () {
    return Math.sqrt(this.x * this.x + this.y * this.y)
};
console.log(p.sqrt().toFixed(4));

function factor(n) {
    var p = 1;
    while (n > 1) {
        p *= n; //阶乘

        n--;
    }
    console.log(n); //n=1
    return p;
}
//console.log(factor(5));
function factor1(n) {
    var p = 1;
    for (var i = 1; i <= n; i++) { //for实现
        p *= i;
    }
    return p;
}
console.log(factor1(5) + factor(5));//240  分别是120+120 返回的是number,支持四则运算。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞

可见,支持以下这样的 if...(if...else...)...else...(if...else)

//整合之前的内容
var a=11;
if(a%2===0){
    console.log("当前a=%d为偶数",a);
    a+=1;
    if(a%2===0){
        console.log("当前a=%d偶数",a);
    } else console.log("当前a=%d为奇数",a);
}else{
    console.log("当前a=%d奇数",a);
    a-=1;
    if(a%2===0){
        console.log("当前a=%d偶数",a);
    } else console.log("当前a=%d为奇数",a);
}

function num_sum(num) {
    var p=0;
    for(var i=1;i<=num;i++){
        p+=i;
    }
    return p;
}
console.log(num_sum(100));//5050

function qs_sum(num) {  //奇数求和
    var p =0;
    for(var i=1;i<=num;i+=2){
        p+=i;
    }
    return p;
}
console.log(qs_sum(100)); //2500

function os_sum(num) {  //奇数求和
    var p =0;
    for(var i=0;i<=num;i+=2){
        p+=i;
    }
    return p;
}
console.log(os_sum(100)); //2550
console.log(os_sum(100)+qs_sum(100));//5050
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册