2011-08-03 38 views
2

我有一個<input>元素,我爲其設置了opacity: 0.3。但是,當我檢查實際值時,我得到0.30000001192092896。請參閱http://jsfiddle.net/85EPf/2/CSS不透明度定義爲0.3,但設置爲0.30000001192092896

爲什麼我會得到此差異?如果這不是一個錯誤,我怎麼能預測其他值的差異?

+2

*即使CSS *不能從浮點數轉義? – thirtydot

+1

我很困惑,你的js小提琴與這個問題無關。 – Dan

+0

更正!謝謝。 (沒有刷新小提琴。) – Randomblue

回答

6

這是又一個浮點數與十進制數舍入問題。見"What Every Computer Scientist Should Know About Floating-Point Arithmetic"

你並不需要關心這個缺點。只要知道浮點數就不能完全表達0.3。 0.30000001192092896已經足夠接近。

+0

「你真的不需要關心這個差異」 - >其實,我發現找到了這個差異。這是一個錯誤的原因。 – Randomblue

+1

是否因爲代碼依賴於浮點數比較?這不建議。 – Jacob

+0

是的。什麼是更好的方法? – Randomblue

1

以二進制表示的計算機內的浮點數不準確。您的值0.30000001192092896是計算機可以用二進制表示0.3的最接近的值。

+1

不,它不是! JS浮點數精確到大約15位數。嘗試'console.log(0.3000000000000001,'|',0.3000000000000001 + 0.0000000000000001);' –

+0

@Brock Adams:這是* your * JS實現的精確性,而不是在OP使用的任何瀏覽器中實現CSS。也許它只使用單精度浮點數。 –

+0

不,[JS規格](http://www.ecmascript.org/docs.php)使用[IEEE 754,雙精度](http://steve.hollasch.net/cgindex/coding/ieeefloat.html )。向我展示一個使用不同精度的瀏覽器。 –