javascript关于保留小数点后位数的问题
在JS中,一般实现保留小数点后N位的话,都是利用toFixed函数
document.write("JS保留两位小数例子");
var a=2.1512131231231321;
document.write("原来的值:"+a+"");
document.write("两位小数点:"+a.toFixed(2)+"四位小数点"+a.toFixed(4));
四舍五入的转换函数,如下:
function round(v,e){
var t=1;
for(;e>0;t*=10,e--);
for(;e<0;t/=10,e++);
return Math.round(v*t)/t;
}
参数里的:
v表示要转换的值
e表示要保留的位数
函数里的两个for,这个是重点了,
第一个for针对小数点右边的情况,也就是保留小数点右边多少位;
第二个for针对小数点左边的情况,也就是保留小数点左边多少位。
for的作用,就是计算t的值,也就是v应该放大或者缩小多少倍的倍数(倍数=t)。
for这里利用到了for里的两个特性,条件判断和计数器累计(循环),
当e满足条件时for继续,并且e每次累加(e的每次累加,就是给for制造不满足循环的条件)的同时,也计算t的值。
最后利用了原生的round方法来计算被放大/缩小后的v的结果,然后把结果放大/缩小到正确的倍数
下面各种保留二位数实例
//保留两位小数
//功能:将浮点数四舍五入,取小数点后2位
function toDecimal(x) {
var f = parseFloat(x);
if (isNaN(f)) {
return;
}
f = Math.round(x*100)/100;
return f;
}
//制保留2位小数,如:2,会在2后面补上00.即2.00
function toDecimal2(x) {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x*100)/100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
}
function fomatFloat(src,pos){
return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);
}
//四舍五入
alert("保留2位小数:" + toDecimal(3.14159267));
alert("强制保留2位小数:" + toDecimal2(3.14159267));
alert("保留2位小数:" + toDecimal(3.14559267));
alert("强制保留2位小数:" + toDecimal2(3.15159267));
alert("保留2位小数:" + fomatFloat(3.14559267, 2));
alert("保留1位小数:" + fomatFloat(3.15159267, 1));
//五舍六入
alert("保留2位小数:" + 1000.003.toFixed(2));
alert("保留1位小数:" + 1000.08.toFixed(1));
alert("保留1位小数:" + 1000.04.toFixed(1));
alert("保留1位小数:" + 1000.05.toFixed(1));
//科学计数
alert(3.1415.toExponential(2));
alert(3.1455.toExponential(2));
alert(3.1445.toExponential(2));
alert(3.1465.toExponential(2));
alert(3.1665.toExponential(1));
//精确到n位,不含n位
alert("精确到小数点第2位" + 3.1415.toPrecision(2));
alert("精确到小数点第3位" + 3.1465.toPrecision(3));
alert("精确到小数点第2位" + 3.1415.toPrecision(2));
alert("精确到小数点第2位" + 3.1455.toPrecision(2));
alert("精确到小数点第5位" + 3.141592679287.toPrecision(5));
js中字符串转数字,并且保留1位小数
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。据两个例子;parseInt("1234blue"); //returns 1234 parseInt("0xA"); //returns 10 parseInt("22.5"); //returns 22 parseInt("blue"); //returns NaN或者是基础模式;parseInt("AF", 16); //returns 175 parseInt("10", 2); //returns 2 parseInt("10", 8); //returns 8 parseInt("10", 10); //returns 10 强制类型转换;还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。 ECMAScript中可用的3种强制类型转换如下: Boolean(value)——把给定的值转换成Boolean型; Number(value)——把给定的值转换成数字(可以是整数或浮点数); String(value)——把给定的值转换成字符串。 用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。 当要转换的值是至少有一个字符的字符串、非0数字或对象(下一节将讨论这一点)时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。String()是最简单的,示例如下;var s1 = String(null); //"null" var oNull = null; var s2 = oNull.toString(); //won’t work, causes an error希望可以帮助到你。avaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计、验证表单、检测浏览器、创建cookies,以及更多的应用。JavaScript 是因特网上最流行的脚本语言
JS 中的四舍五入
原文地址: https://alphahinex.github.io/2022/03/20/javascript-rounding-off/ description: "通过最小的浮点数或科学记数法减少误差" date: 2022.03.20 10:34 categories: - JavaScript tags: [JavaScript] keywords: js, 四舍五入, toFixed, Number.EPSILON 由于 JS 中 Number 对象的 toFixed 方法在对某些值进行四舍五入计算时 存在误差 ,而这种误差在进行货币金额计算时是不能接受的,那么在 JS 中我们应该如何正确的进行四舍五入呢? 以保留两位小数为例,选取几种典型的方法,其中 n 为要进行四舍五入运算的浮点数。 为 n 添加一个小的偏移量,再进行四舍五入: 保留两位小数时,先将 n 扩大 10^2 倍,然后通过 Math.round 获得最接近的整数,缩小 10^2 倍后再进行四舍五入: 为 n 添加一个小的偏移量后,再进行方法 B 中的操作: 通过科学记数法进行方法 B 的操作: 可以看到,每种方法都有计算结果与预期不符的情况,但方法 D 仅在 n 只能使用科学计数法进行表示时才会出现与预期不符( NaN )的情况。 当 n 为负数时,直接使用上面的四个方法均得不到正确的结果,因为上面的方法主要是采用增加偏移量和 Math.round 来进行计算的。 n 为正数时,增加偏移量,n 为负数时,应该减少偏移量; Math.round 在小数部分为 0.5 时,会取下一个最接近正无穷的最小整数: 如果 n 为负数,可先取绝对值后用上述方法进行四舍五入,之后再将结果转换为负数。 总体来说,方法 D 的适用性最好,可以用来作为在 JS 中进行四舍五入运算的主要方式。
JavaScript如何实现数据的四舍五入
实现数据的四舍五入有以下几种方法:round方法、tofixed方法、parseInt方法、ceil方法以及floor方法在JavaScript 对数值进行四舍五入的操作有以下几种round()方法:可把一个数字舍入为最接近的整数,即四舍五入toFixed()方法:可把 Number 四舍五入为指定小数位数的数字。parseInt()方法:可将小数转化为整数(位操作符)ceil()方法:可对一个数进行上舍入floor()方法:可对一个数进行下舍入接下来在文章中将和大家详细介绍这几种方法的具体用法round()方法document.write(Math.round(4.55) + "");document.write(Math.round(-6.45));效果图:toFixed()方法var num=3.141592;document.write(num.toFixed(2));效果图:parseInt()方法document.write(parseInt("12.333"));效果图:ceil()方法与floor()方法document.write("ceil方法:")document.write(Math.ceil("12.333") + "");document.write("floor方法:")document.write(Math.floor("12.333"));效果图: