我們正在使用3.6版本。我們稱之爲舍入函數來清理小數部分。事情是這樣的......如何修復Adobe Flex簡單乘法錯誤
private function ceilingRounding(value:Number, power:Number):Number
{
var scale:Number = Math.pow(10, power);
return (Math.ceil(value * scale)/scale);
}
函數的結果是出乎意料的下述值: 值= 76.7549,規模= 10000 結果應該是76.7549,但我們得到的76.7550
使用調試器,我們看到這個值* scale = 767549.0000000001。當然這個數字會四捨五入到76.7550,但爲什麼我們會得到.0000000001,我們該如何解決這個問題?
經典[浮點精度(https://www.google.com/search?q=flickr#q=floating+point+precision)問題。它在JavaScript中甚至在Java中都是一樣的(儘管在Java中你將不得不在逗號後遇到更多的地方)。 – RIAstar
如果「76.7549 * 1000000/100」會導致相同的錯誤值,我會同意您的意見,但是我會得到「767549」,並且沒有結尾錯誤。此外,像「22252 - 22252.03」給出了-0.029999999998835847而不是-0.3。在這一點上,似乎沒有Flex操作(數學)可以信任。到目前爲止,我不得不使用GraniteDS BigDecimal來執行基本的數學運算。我也在Flex 4.6中獲得了同樣的行爲。我不知道Apache版本。 – Patrick
關於你的最後一點:Flex的各個版本之間沒有區別;基元和數學運算是純粹的Flash/ActionScript問題,Flex只是一個框架(不幸的是,它沒有BigDecimal等價物)。 – RIAstar