我在Java中四捨五入BigDecimals時遇到了一些麻煩。 我想轉換從腳英寸,反之亦然值,這就是我:我該如何解決這個糟糕的BigDecimal舍入?
//To convert from ft to in;
//...
BigDecimal CINCH = new BigDecimal("12");
Inch.setText(CINCH.multiply(VFEET).toString()); //VFEET is the user input
//To convert from in to ft
//...
BigDecimal CFEET = new BigDecimal("12"); //Initially I multiplied the input with 0.0833333333
Feet.setText(VINCH.divide(CFEET, 7, RoundingMode.HALF_UP).toString()); //VINCH is the user input
如果我嘗試將1-英尺英寸,它返回預期值(12)。 如果我嘗試將12英寸轉換爲英尺,它會返回預期值(1),但會出現像我預期的那樣的7個小數點後的情況。
如果我將1英寸轉換爲英尺,則返回0.08333333,如果將此值從英尺轉換爲英寸,則應該返回1,但返回0.9999996。 如果我將2英寸轉換爲英尺,則返回0.1666667,如果我將此值從英尺轉換爲英寸,則返回2.0000004
如何解決此問題? (我知道我可以用雙打做這個,這是我的第一個計劃,但我遇到了一個準確性問題(大於這個))
怎麼樣擺脫四捨五入,即使用_RoundingMode.UNNECESSARY_? – Juvanis
雙打實際上是測量的正確答案。小數應該用於具有精確數字量的事物,例如財務值。儘管它沒有專門解決您的問題,但請參閱http://ericlippert.com/2013/07/18/why-not-allow-doubledecimal-implicit-conversions。 – tvanfosson
@Juvanis我嘗試使用RoundingMode.UNNECESSARY ...當我嘗試轉換時,程序崩潰...(我嘗試1英尺) – Luso