2017-08-02 68 views
0

在數據庫中,商店價格不應該使用浮點型(應該是十進制)。那麼在JavaScript parseFloat()的價格安全嗎?parseFloat在JavaScript中安全嗎?

例如我有1000000個數字的數組,我想解析所有浮點數,並在整個集合和整體中執行各種操作。

+3

浮動是漂浮,所以相同的警告適用,在JavaScript 0.1 + 0.2不是0.3。由於10 + 20是30,所以最好不要處理小數貨幣,而要使用整數小數貨幣單位。 –

回答

0

這取決於你的意思是「安全」,但一般來說你不應該使用浮點數學來計算價格。 parseFloat只能根據「舍入到最近,連接到偶數」舍入模式,保證得到的浮點數是最接近的IEEE double。在大多數情況下,這會導致一個小的舍入誤差:

> parseFloat("0.11").toFixed(40) 
< "0.1100000000000000005551115123125782702118" 

進一步的數學運算會增加舍入誤差。如果您確保將最終結果四捨五入到toFixed(2)的兩位小數位,則在大多數情況下應該會得到預期的結果。但是,這並不保證:

> parseFloat("1.37") * 90 * 90 * 90 * 90 * 90 * 90 * 90 * 90 
< 5897400777000001 

除非你真的知道自己在做什麼,用最小的貨幣單位的整數值工作是在安全方面。請注意,JavaScript的數字類型只能存儲整數up to 253-1 exactly