一倍我有一個傳統項目,它具有使用float和長變量,像這樣的數學:更換浮子通過整個項目
long i = initWihtVeryBigNumber();
float multiplier = 1.3f;
i *= multiplier;
這主要會由於圓誤差浮動的大小,這必須被替換與:
i = (long)(i* (double)multiplier);
或乘法器本身應該是雙重而不是浮動。
所以,如果我通過整個項目浮動更改爲雙倍的問題可能會導致任何不可預知的行爲或不?如果是的話,你能提供任何可能導致問題的例子嗎?
如果您想要精確的十進制數,請改用'java.math.BigDecimal'。 – 2014-08-27 15:41:17
我不確定,但有可能某些方法可能依賴浮動行爲。你應該寫一堆測試用例,進行重構,並找出答案。 – 2014-08-27 15:41:26
確保你也將'1.3f'改爲'1.3d'或者只是'1.3'。如果你說'double multiplier = 1.3f',我相信它會創建一個32位的浮點數,然後將其轉換爲64位,這意味着你不會像1.3那樣接近1.3。 'float'和'double'都不會完全代表'1.3',但'float'錯誤會更大。我只是這樣說,因爲我不知道你是否打算在編輯器中做一個簡單的文本替換'float' - >'double'。 – ajb 2014-08-27 15:41:53