关于数值型数据精度的问题
下面这段代码运行后显示有点问题,好象精度太高了。
比如56.10*23.12=1297.032而代码运行结果却是:1297.0320000000001
<html>
<head>
<script language=javascript>
function getAmt() {
if(myform.d1.value.length>0 && myform.d2.value.length>0)
{
myform.d3.value=parseFloat(myform.d1.value)*parseFloat(myform.d2.value);
}else{
myform.d3.value="fail";
}
}
</script>
</head>
<body>
<form name=myform>
<input type=text name=d1 value="">
<input type=text name=d2 value="" onBlur=getAmt()>
<input type=text name=d3 value="">
</form>
</body>
</html>
问题点数:50、回复次数:9Top
1 楼net_lover(【孟子E章】)回复于 2002-09-09 12:16:02 得分 0
这是js的缺陷,你可以先转换成整数再运算Top
2 楼dylanOK(迪伦)回复于 2002-09-09 12:30:17 得分 0
果然!Top
3 楼qiushuiwuhen(秋水无恨)回复于 2002-09-09 12:57:26 得分 20
<script>
alert(qswhMul(56.10,23.12));
function qswhMul(n1,n2){
var m=0,s1=n1.toString(),s2=n2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
</script>Top
4 楼saintKnight(saintKnight)回复于 2002-09-09 14:52:34 得分 0
To:秋水无恨
如果我要保留两位小数点,如何办?Top
5 楼qiushuiwuhen(秋水无恨)回复于 2002-09-09 16:12:20 得分 25
IE5.5+用
alert(qswhMul(56.10,23.12).toFixed(2));
以下用:
<script>
function Number.prototype.Fixed(num){
with(Math){
var m=pow(10,Number(num))
return round(this*m)/m;
}
}
alert(qswhMul(56.10,23.12).Fixed(2));
function qswhMul(n1,n2){
var m=0,s1=n1.toString(),s2=n2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
</script>
Top
6 楼emu(月亮不在手指尖上)回复于 2002-09-09 22:08:29 得分 0
漂亮Top
7 楼Reve(仨仁仕)回复于 2002-09-09 22:33:56 得分 5
<script>
var f = 11.20000000000000000001;
alert(f.toFixed(3));
</script>Top
8 楼danky()回复于 2002-09-10 01:06:43 得分 0
JavaScript是客户端的语言,有这样的缺陷也不奇怪,我们只好谅解谅解了!Top
9 楼winlose(winlose)回复于 2003-03-19 16:17:20 得分 0
仅对加减乘的精度进行控制,无除法的。
var mCurrentValue = 0.0;
mCurrentValue = parseFloat(str1);
var mValue=0.0;
mValue = parseFloat(str2);
var degree1 = str1.toString().lastIndexOf(".");
if (degree1 == -1)
degree1 = 0;
else
degree1 = str1.length - degree1 - 1;
var degree2 = str2.toString().lastIndexOf(".");
if (degree2 == -1)
degree2 = 0;
else
degree2 = str2.length - degree2 - 1;
var degree=0;
switch(mCalulatorNum[0])
{
case "+":
{
mCurrentValue = mCurrentValue + mValue;
degree = (degree1>degree2)?degree1:degree2;
mCurrentValue = mCurrentValue.toFixed(degree);
break;
}
case "-":
{
mCurrentValue = mCurrentValue - mValue;
degree = (degree1>degree2)?degree1:degree2;
mCurrentValue = mCurrentValue.toFixed(degree);
break;
}
case "*":
{
mCurrentValue = mCurrentValue * mValue;
//处理精度
var degree = degree1+degree2;
mCurrentValue = mCurrentValue.toFixed(degree);
break;
}
} Top
相关问题
- proc数据精度的问题 一个数值0.000073存到数据库里面 变成了7.33333363314159E-5
- 为什么单精度类型的数值范围是10^(-37)至10^38
- 后端为access,现将vfp中数据通过编程导入access,并通过dbgrid控件体现,但发现对于字段为数字型,字段类型不论双精度还是单精度,对于vfp为数值型,如0.25在dbgrid中都体现为0.250000056.请问如何解决.
- ADO+Access,数值精度问题
- double类型数据精度的问题,急,高分!
- 怎样改变double类型数据的精度?
- access2000数据库中单精度型的数据是对应double还是float型???
- 数据精度的问题
- 字段类型为单精度数值型,设小数位数为2位,为什么会显示为2.1999456
- 字符型转化为数值型(数据表字段)!




