为什么用"ParseFloat"导致 1.28+0.1=1.37999999523163

mtide 2003-01-20 11:10:01
还有很多类似的问题

我是用ParseFloat来处理文本框的数字的,未存进数据库前文本框显示是没有什么问题的,但前几次试的时候曾出现这种情况,这是不是有什么问题,是JS函数的问题还是ACCESS的问题?
有什么函数可以限制数字的小数位
...全文
66 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leal 2003-01-21
  • 打赏
  • 举报
回复
是ACCESS的问题,js里用toFixed()方法:
var nNum=1.7003
var n=2
alert(nNum.toFixed(n)) //n为小数位
wangxj0600 2003-01-21
  • 打赏
  • 举报
回复
toFixed()好象在IE5。5以后才支持,还是用孟子的方法好了
mtide 2003-01-21
  • 打赏
  • 举报
回复
更糟糕的是,我刚才改用字符串型,好象都是这样 !!
VBS里面有没有什么函数可以限制小数位的?
emu 2003-01-21
  • 打赏
  • 举报
回复
function fixTo(s,i){
if (s==null || s=="" || isNaN(s) || Math.round(s)==0) return 0;
i = Math.round(i);
if (i==0) return Math.round(s);
if (i==null || isNaN(i) || i<0) i=2;
var v = Math.round(s*Math.pow(10,i)).toString();
if (/e/i.test(v)) return s;
return v.substr(0,v.length-i)+"."+v.substr(v.length-i);
}
qiushuiwuhen 2003-01-21
  • 打赏
  • 举报
回复

<script>
alert(qswhAdd(1.28,0.1))
function qswhAdd(n1,n2){
var r1,r2,m;
try{r1=n1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=n2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (n1*m+n2*m)/m
}
</script>
孟子E章 2003-01-20
  • 打赏
  • 举报
回复
实在不行用字符串型,如果需要计算再进行转换
mtide 2003-01-20
  • 打赏
  • 举报
回复
ACCESS里面的"单精度型"
孟子E章 2003-01-20
  • 打赏
  • 举报
回复
字段类型?
mtide 2003-01-20
  • 打赏
  • 举报
回复
JS那里似乎现在没有问题,这是提交后生成的SQL:
Insert Into stockTemp(stockID,location,spec,model,[slevel],box,pieceInbox,piece,total,[value],tvalue,totalvalue) values(200301200003,1,4,1,1,1,1,1,2,1.2,0.5,1.7)
上面的明明是"1.7",但写进ACCESS,依然变成了:1.70000004768372
孟子E章 2003-01-20
  • 打赏
  • 举报
回复
js本身的缺陷。你可以先转换成整数,再运算,然后除转换因子

<script>
alert(1.28+0.1)
alert((128+10)/100)
</script>

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧