2010-07-30 21 views
8

當你的電腦無法獲得正確的金額時,你知道這是個煩人的東西!我的電腦變笨了。 0 + 20 = 19.921875 !!!幫我!

我沒有絲毫的想法,爲什麼這種情況正在發生:

_root.attachMovie("clippy","aClip",_root.getNextHighestDepth()); 

trace("alpha 1 = "+aClip._alpha); 
aClip._alpha = 0; 
trace("alpha 2 = "+aClip._alpha); 
aClip._alpha += 20; 
trace("alpha 3 = "+aClip._alpha); 
aClip._alpha = 20; 
trace("alpha 4 = "+aClip._alpha);

輸出是:

alpha 1 = 100 
alpha 2 = 0 
alpha 3 = 19.921875 
alpha 4 = 19.921875

19.921875應該是20! :(

我就要哭。我是否有處理器癌症?老年癡呆症? 誰說電腦不犯錯誤?

PS我也用aClip._alpha = Math.round(aClip._alpha )但跟蹤是一樣的!

+1

它可能必須做些浮點操作,但我從來沒有涉足過動作。投到int可能? – Wrikken 2010-07-30 16:41:16

回答

23

_alpha值存儲爲一個字節(我應該說8位 - 一個整數值從0255

當您設置一個_alpha值,你用一個百分比。 當您檢索它時,它會生成百分比的精確十進制表示。

aClip._alpha = 20; 

25620%51.2,因爲它是存儲爲整數,它會被難倒到51

然後,

51/256 * 100是Flash如何給它回給你,這是19.921875

+3

很好解釋。我沒有任何動作經驗,甚至我去「是啊,有道理!我明白了!」 – rownage 2010-07-30 17:10:13

+0

謝謝。現在我明白了。 – navand 2010-07-30 18:45:12

+3

很好的解釋。但是,國際海事組織在Macromedias/Adob​​es部分的設計上有些不好,因爲1)它忽略了吸氣/吸氣原理的重要部分 - 我的意思是你設置了一個變量爲20,但是之後得到了[email protected]%$ ^和2)會打破直接的,邏輯的和可讀的代碼,比如'if(_alpha == 20)',因爲即使完全控制它,你也永遠無法知道'_alpha'將等於什麼。當然'int(_alpha)'會有所幫助,但是再次只是在這個小混亂的頂部打洞。我明白沒有抽象這個進一步的原因 - 速度。 – amn 2010-08-02 10:39:55

0

如果我沒有記錯,flash會在內部存儲一些奇怪的瘋狂值,比如0..240(我認爲它不是255),可能是因爲它需要20爲20%,經過四捨五入後,19.92是最近值,一旦它被轉換回百分比?

1

四捨五入似乎

-1

無論其他答案的有效性如何,都有已知和有據可查的浮點實現的人工製品,其中包括Adobe Flash Player使用的浮點實現。下面的代碼,例如,會產生1.0010000000000001稍微不正確(如果是數學這樣的事)輸出:

trace(0.1009 + 0.9001); 

這一切,就像我說的,是使用IEEE浮點規範執行工作的一部分。

0

「浮動問題」也出現在Flash CS5的組件屬性框中。全新安裝後,CS5對於組件屬性似乎很瘋狂,並且在鍵入20之後出現20.00001。

感謝Adobe Application Manager更新您的軟件可以解決此問題。

相關問題