funAlert()
{
   var a=53855.45;
   var b=2395.46;
   var c=a+b;
}
c=56250.90999999999999;这个类似的怎么解决能保证 结果 正确 是 c=56250.91因为我这套系统是钱的  必须精确 就大牛给 完美解决办法.

解决方案 »

  1.   

    几毛钱现在没人在乎了,直接Math.round好了
      

  2.   

    http://blog.csdn.net/lifuxiangcaohui/article/details/6566710不过我始终建议,精确计算不要放在前端给JS来做~~~
      

  3.   

    <input type="button" onclick="changeTwoDecimal(56250.90999999999999)"/>
    function changeTwoDecimal(x)
    {
    var f_x = parseFloat(x);
    if (isNaN(f_x))
    {
      alert('function:changeTwoDecimal->parameter error');
      return false;
    }
    var f_x = Math.round(x*100)/100;
    alert(f_x);
    return f_x;
    }
      

  4.   


    var a=53855.45;
    var b=2395.46;
    var c=a+b;
    alert(c.toFixed(2))
      

  5.   

    貌似和小数点前的数字大小有关,32767.45 + 0.46就是对的,32768.45 + 0.46就有问题了,int取值范围是-32728~32767,会不会和这个有关,另外算钱这种事情还是放后台做吧,前台也太不安全了
      

  6.   

    额,还是解释下吧,不然以讹传讹就悲剧了。
    javascript(其实很多语言都是这样)为了提供计算的性能,对计算的精度进行了舍弃,然后计算后转换成十进制就会出现大家看到的情况。
      

  7.   

    c.toFixed(2);
    如果数据太大,超出了数据类型范围,需要另作处理,可以参考清洁工大叔曾经写的大数计算。
      

  8.   

    ajax去后台计算然后返回结果吧。那样才能精确啊。
      

  9.   

    这个放到后台做好  关于钱的话前台不安全  后台如果是拿java做的话有个BigDecmial类可以精确 double不行 小树二进制不能精确转换导致的  好像
      

  10.   

    你好 我叫帅馨 工作几年了 我想学点技术 看中了软件开发这个行业 想去学习 但学费太高了 看你也是从事这个行业的  能给我点意见么 这个行业怎么样啊?生活真的迷茫了,,,,,,,能不能加你QQ聊聊呢/  QQ670263212