CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

关于数值型数据精度的问题

楼主saintKnight(saintKnight)2002-09-09 12:04:34 在 Web 开发 / JavaScript 提问

下面这段代码运行后显示有点问题,好象精度太高了。  
  比如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
  • 字符型转化为数值型(数据表字段)!

关键词

得分解答快速导航

  • 帖主:saintKnight
  • qiushuiwuhen
  • qiushuiwuhen
  • Reve

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo