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,支持四则运算。