这个是JS的硬伤, 由于JS的位操作关系, 返回的值不时会有这种长串出现, 你对返回值取一个固定位数小数位的操作吧:
(0.278*100).toFixed(1);

解决方案 »

  1.   

    需要的地方可以用VBScript来计算
    但这样对系统资源要求多点,没什么大不了的
      

  2.   

    to: meizz(梅花雪) 那我如何判断什么时候有这种现象;并不时所有数都会这样的;
      

  3.   

    to: mikespook(懒猫开始新生活) 
       难道0.09+0.01这样的数计算也会存在精度的问题
       那0.0009+0.0001为什么还没精度的问题呢(0.0009+0.0001=0.001)?   如果是你说的精度问题能更具体地解释一下吗?
      

  4.   

    .......
    0.979 * 1.0E2 = 97.89999999999999 error!
    0.98 * 1.0E2 = 98
    0.981 * 1.0E2 = 98.1
    0.982 * 1.0E2 = 98.2
    0.983 * 1.0E2 = 98.3
    0.984 * 1.0E2 = 98.4
    0.985 * 1.0E2 = 98.5
    0.986 * 1.0E2 = 98.6
    0.987 * 1.0E2 = 98.7
    0.988 * 1.0E2 = 98.8
    0.989 * 1.0E2 = 98.9
    0.99 * 1.0E2 = 99
    0.991 * 1.0E2 = 99.1
    0.992 * 1.0E2 = 99.2
    0.993 * 1.0E2 = 99.3
    0.994 * 1.0E2 = 99.4
    0.995 * 1.0E2 = 99.5
    0.996 * 1.0E2 = 99.6
    0.997 * 1.0E2 = 99.7
    0.998 * 1.0E2 = 99.8
    0.999 * 1.0E2 = 99.9
    总出错数:258
      

  5.   

    呵呵,java也是一样的,其实很多语言的浮点运算都有这个问题,他们也知道,不改的原因主要从性能考虑。
      

  6.   

    小弟先谢谢大家了,我也试了Java,看来都一样;不知道Fortran如何。
    看来人无完人,计算机也一样呀!
    to: netvt(唯她(为了泡老婆,努力学习LISP))
      说的有道理!所有的这些误差确实完全可以忽略。有谁有关于此类技术文档吗?我想了解更多一点.
      

  7.   

    这个问题csdn里很多语言里都有问过。这个问题就好象下面的例子
    1/2=0.5*2=1
    1/3=0.3333……*3=0.99999……
    显然第二个算式也应该等于1的。如果我们要求结果的有效位数是4位,计算时用5位去计算结果就会这样:
    1/3=0.33333*3=0.99999 然后舍入 =1.0000 这样结果就对了。如果结果需要5位有效数字,那么没法根据后面的位数进行舍入,所以只能是0.99999。有时结果恰好不需要进位,那么结果也对了,这个就是为什么有的结果对,有的结果有误差的原因。这个10进制计算产生的误差和javascript有什么关系呢?问题出在我们输入十进制数转换成二进制数时,因为10进制的小数部分转换成2进制的小数部分时,有的会出现无限循环小数(具体转法很多基础书上都有),所以在计算机内存中的只是个近似数,参加运算后,有可能误差缩小,也有可能扩大,也有可能变的完全正确,最后显示给用户的结果也只能是个近似数。只有当运算时采用足够的精度进行,才能在最后结果进行舍入时更精确。那么javascript为什么不在内部运算时提高精度呢,我想大概是效率问题,提高精度就需更多的计算时间。话说回来,就算用1M内存去表示它,它还只是个近似值。