ASP+JS计算出来的结果为什么是8.9999999999或者是9.0000000001

来源:百度知道 编辑:UC知道 时间:2024/07/05 13:08:37
本来应该是整数的.
function jisuan()
{
var nm1=document.form1.shuliang.value;
var nm2=document.form1.danjia.value;
var nm3=nm1*nm2;
document.form1.jine1.value=nm3;
}

解决的办法是转换一下类似于cint
原因不明,我猜是表单里的数据类型是文本,系统为了不丢失数据按照浮点型进行运算了

var nm3=parseInt(nm1*nm2);

就是计算精度问题

你可以alert(nm3.fix(0))就得到整的了

"浮点数”不是“实数”,浮点数有最大表示范围,在表示范围内用最接近实数的浮点数可以表示数来表示,比如
0.1是实数,意味着0.10000000…… 都是0.1,而double无法精确表示0.1,但它能精确表示 +0.1000000000000000055511151231257827021181583404541015625 ,所以它用 +0.1000000000000000055511151231257827021181583404541015625 来表示 0.1,同样:
0.1 <--> 0.1000000000000000055511151231257827021181583404541015625
0.2 <--> 0.200000000000000011102230246251565404236316680908203125
0.3 <--> 0.299999999999999988897769753748434595763683319091796875

当你用浮点数来计算时,结果也是浮点数.计算机无法精确表示的,于是它用最接近的值来表示