志达IT
做快乐程序员

js四舍五入(js的数据类型有哪几种)

js四舍五入

由于JS中Number对象的toFixed办法在对某些值进行四舍五入核算时存在误差,而这种误差在进行钱银金额核算时是不能接受的,那么在JS中咱们应该如何正确的进行四舍五入呢?
以保存两位小数为例,选取几种典型的办法,其中n为要进行四舍五入运算的浮点数。
办法A
为n添加一个小的偏移量,再进行四舍五入:
(n+Number.EPSILON).toFixed(2)
办法B
保存两位小数时,先将n扩展10^2倍,然后通过Math.round获得最接近的整数,缩小10^2倍后再进行四舍五入:
(Math.round(n*100)/100).toFixed(2)
办法C
为n添加一个小的偏移量后,再进行办法B中的操作:
(Math.round((n+Number.EPSILON)*100)/100).toFixed(2)
办法D
通过科学记数法进行办法B的操作:
(+(Math.round(n+”e2″)+”e-2″)).toFixed(2)js
对比核算成果
n期望值办法A办法B办法C办法D
0.9951.001.00(√)1.00(√)1.00(√)1.00(√)
2.0052.012.00(X)2.01(√)2.01(√)2.01(√)
5.4755.485.47(X)5.48(√)5.48(√)5.48(√)
1.0051.011.01(√)1.00(X)1.01(√)1.01(√)
9.4959.509.49(X)9.49(X)9.49(X)9.50(√)
0.0149999999999999650.010.02(X)0.01(√)0.02(X)0.01(√)
1.496e-70.000.00(√)0.00(√)0.00(√)NaN(X)
能够看到,每种办法都有核算成果与预期不符的状况,但办法D仅在n只能运用科学计数法进行表示时才会出现与预期不符(NaN)的状况。
负数
当n为负数时,直接运用上面的四个办法均得不到正确的成果,由于上面的办法主要是采用添加偏移量和Math.round来进行核算的。
n期望值办法A办法B办法C办法D
-1.125-1.13-1.12(X)-1.12(X)-1.12(X)-1.12(X)
n为正数时,添加偏移量,n为负数时,应该减少偏移量;
Math.round在小数部分为0.5时,会取下一个最接近正无穷的最小整数:
Ifthefractionalportionisexactly0.5,theargumentisroundedtothenextintegerinthedirectionof+∞.Notethatthisdiffersfrommanylanguages’round()functions,whichoftenroundthiscasetothenextintegerawayfromzero,insteadgivingadifferentresultinthecaseofnegativenumberswithafractionalpartofexactly0.5.
如果n为负数,可先取绝对值后用上述办法进行四舍五入,之后再将成果转换为负数。
定论
整体来说,办法D的适用性最好,能够用来作为在JS中进行四舍五入运算的主要方式。

js的数据类型有哪几种

JavaScript言语的每一个值,都归于某一种数据类型。JavaScript的数据类型,共有9种:
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
引证数据类型:目标(Object)、数组(Array)、函数(Function)。
注:Symbol是ES6引入了一种新的原始数据类型,表明绝无仅有的值。
1、Undefined:Undefined类型只要一个值,即特殊值undefined。在运用var声明变量,但未对其加以初始化时,这个变量值便是undefined。
2、Null:Null类型是第二个只要一个值的数据类型。其特殊值便是Null。从逻辑角度上看,null是一个空的目标指针。而这也正是运用typeof操作符检测null值,会回来“object”的原因。
3、Boolean:即布尔类型,该类型有两个值:true
false。需要注意的是,Boolean类型的字面值true和false是区别大小写的。也便是说,True和False(以及其它的混合大小方式)都不是Boolean值,只是标识符。
4、Number:该类型的表明办法有两种方式,第一种是整数,第二种为浮点数。整数:能够通过十进制,八进制,十六进制的字面值来表明。浮点数:便是该数值中有必要包括一个小数点,且小数点后有必要有一位数字。
5、String:String类型用于表明由零或多个16位的Unicode字符组成的字符序列,即字符串。至于用单引号,仍是双引号,在js中仍是没有差别的。记住成对出现。js
6、Symbol类型
符号(Symbols)是ECMAScript第6版新定义的。符号类型是唯一的并且是不可修改的
vars=Symbol()
Symbol函数前不能运用new命令,否则会报错。这是由于生成的Symbol是一个原始类型的值,不是目标
Symbol函数能够接受一个字符串作为参数,表明对Symbol实例的描绘
7、Object:Object数据类型,称为目标,是一组数据和功能(函数)的集合。能够用new操作符后跟要创立的目标类型的称号来创立。也能够用字面量表明法创立。在其间增加不同名(包括空字符串在内的恣意字符串)的特点。
8、Array
JavaScript数组用方括号书写。数组的项目由逗号分隔。
下面的代码声明(创立)了名为cars的数组,包括三个项目(汽车品牌):
1
varcars=[“Porsche”,”Volvo”,”BMW”];
数组索引基于零,这意味着第一个项目是[0],第二个项目是[1],以此类推。
ECMAScript中的数组和其他言语的数组有着相当大的区别:
ECMAScript数组的每一项能够保存任何类型的数据;
ECMAScript数组的大小能够动态调整,可向数组增加元素或者删除元素;
9、Function
ECMAScript中的函数是目标,与其他引证类型相同具有特点和办法。因而,函数名实践是一个指向函数目标的指针。
1)、函数声明
functionsum(num1,num2){
returnnum1+num2;
}//函数声明
varsum=function(num1,num2){
returnnum1+num2;
};//函数表达式这里的分号很重要
2)、没有重载
functionaddSomeNumber(num){
returnnum+100;
}
functionaddSomeNumber(num){
returnnum+200;
}
varresult=addSomeNumber(100);//300
创立第二个函数时覆盖了引证第一个函数的变量addSomeNumber。
3)、函数声明与函数表达式
alert(sum(10,10));
functionsum(num1,num2){
returnnum1+num2;
}
这样的代码能够正常执行。代码开端执行前,解析器会率先读取函数声明并将其增加到执行环境中,对代码求值前,JS引擎在第一遍会声明函数并将它们放到源代码树的顶部。但改为函数表达式就会犯错。
4)、作为值的函数
像传递参数相同把一个函数传递给另一个函数
functioncallSomeFunction(someFunction,someArgument){
returnsomeFunction(someArgument);
}
functionadd10(num){
returnnum+10;
}
varresult1=callSomeFunction(add10,10);
alert(result1);//20
functiongetGreeting(name){
return”Hello”+name;
}
varresult2=callSomeFunction(getGreeting,”Mike”);
alert(result2);//HelloMike
//callSomeFunction是通用的,函数作为第一个参数传递进去,回来执行第一个参数后的结果
从一个函数中回来另一个函数
#n为浮点数,代表要四舍五入的数
#m为整数,代表小数部分保存的位数
n>0?(+(Math.round(n+”e”+m)+”e-“+m)).toFixed(m):-((+(Math.round(-n+”e”+m)+

赞(0)
未经允许不得转载:志达IT网站 » js四舍五入(js的数据类型有哪几种)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

志达IT网站 每天分享编程和互联网的IT技术博客

登录/注册联系我们