2

毎回0.1を引く単純な間隔があります。しかし、3回繰り返した後、数列は奇妙になります...これは私が持っているものです:

function transition_opacity(div_id,opacity){
    opacity = 1; //temporary test
    var IntervId = setInterval(process_transition,30);

    function process_transition(){
        console.log(opacity); //check the value
        opacity = opacity -  0.1
        div_id.style.opacity = opacity;
    if(opacity < 0.0){
            rmv_div(div_id);
            clear();
        }
    }

    function clear(){
         clearInterval(IntervId);
    }
}

コンソール ログには、次の値が表示されますopacity

1
0.9 
0.8 
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013 
0.30000000000000016
0.20000000000000015
0.10000000000000014
1.3877787807814457e-16 

なぜこのクレイジーな数列を行うのですか =/ 私には意味がないようです... 0.8 までは問題なく動作します

4

3 に答える 3

0

Javascript 浮動小数点は、この種の問題で知られています。それは、「[Javascript] 2 進浮動小数点演算 (IEEE 1754) の IEEE 標準を採用した」ためです (ここで良い本を引用します)。

推奨される解決策は、整数値で作業することです。シナリオでは、不透明度の値に 100 を掛けて計算し、100 で割って値を 10 進数に変換することは理にかなっています。

于 2013-10-16T22:22:20.713 に答える