javascript关于保留小数点后位数的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript关于保留小数点后位数的问题相关的知识,希望对你有一定的参考价值。
var s=prompt("输入小数","");
var r=prompt("保留小数位数","");
var a=s*Math.pow(10,r);
var b=Math.round(a)/Math.pow(10,r);
document.write(b);
这个方法虽然可以,但是有一个缺点,当我输入2.1想保留三位小数时,结果还是2.1,如果要显示2.100怎么做?
<script language="javascript">
document.write("<h1>JS保留两位小数例子</h1><br>");
var a=2.1512131231231321;
document.write("原来的值:"+a+"<br>");
document.write("两位小数点:"+a.toFixed(2)+"<br>四位小数点"+a.toFixed(4));
</script>
四舍五入的转换函数,如下:
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的结果,然后把结果放大/缩小到正确的倍数
下面各种保留二位数实例
<script type="text/javascript">
//保留两位小数
//功能:将浮点数四舍五入,取小数点后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));
</script> 参考技术A var s = 2.1;
s = Math.pow(10, 3) * s;
s = String(s).replace(/(\d*)(?=\d3)/, "$1.");
alert(s); 参考技术B var a=new Number(prompt("输入小数",""));
var b=new Number(prompt("保留小数位数",""));
document.writeln(a.toFixed(b)); 参考技术C <script>
var s=prompt("输入小数","");
var r=prompt("保留小数位数","");
s = parseFloat(s).toFixed(r)
document.write(s);
</script>
在IE8和火狐下都试了
C语言中输出时怎样控制小数点后的位数,请举例说明保留1、2、3、4位小数等等,谢谢
参考技术A在C的编程中,总会遇到浮点数的处理,有的时候,我们只需要保留2位小数作为输出的结果,这时候,问题来了,怎样才能让cout输出指定的小数点后保留位数呢?
在C语言的编程中,我们可以这样实现它:
[cpp] view plain copy
printf("%.2f", sample);
在C++中,是没有格式符的,我们可以通过使用setprecision()函数来实现这个需求。想要使用setprecision()函数,必须包含头文件#include <iomanip>。使用方式如下:
[cpp] view plain copy
cout << "a=" << setprecision(2) << a <<endl;
这时候,我们会发现,如果a的值为0.20001,输出的结果为a=0.2,后面第二位的0被省略了。如果我们想要让它自动补0,需要在cout之前进行补0的定义。代码如下:
[cpp] view plain copy
cout.setf(ios::fixed);
cout << "a=" <<fixed<< setprecision(2) << a <<endl; //输出a=0.20
这样,我们就可以得到0.20了。当然,如果想要关闭掉补0,只需要对fixed进行取消设置操作。[cpp] view plain copy
cout.unsetf(ios::fixed);
cout << "a=" << setprecision(2) << a <<endl; //输出a=0.2
我们的输出结果就又变回a=0.2了。参考代码
[cpp] view plain copy
#include <iostream>
#include <iomanip>
using namespace std;
int main()
float a = 0.20001;
cout.setf(ios::fixed);
cout << "a=" <<fixed<< setprecision(2) << a <<endl; //输出结果为a=0.20
cout.unsetf(ios::fixed);
cout << "a=" << setprecision(2) << a <<endl; //输出结果为a=0.2
return 0;
以上是关于javascript关于保留小数点后位数的问题的主要内容,如果未能解决你的问题,请参考以下文章
C语言中输出时怎样控制小数点后的位数,请举例说明保留1、2、3、4位小数等等,谢谢