jFormatted 文本字段未正确格式化双数据

我有一个jFormmatedTextField错误地显示双重数据。该字段的格式如下##,##0.00,但是当使用它设置此字段的值时,setValue它有时会显示类似 77.88899888 的内容,但它不应该这样。例如,当我乘以 20.38 x 20 但当我乘以 20.38 x 15 它显示正确的数字时,就会发生此问题。我不明白为什么会这样。

代码是这样的:

resultField.setValue(new Double(myResultField));


隔江千里
浏览 128回答 1
1回答

婷婷同学_

一般对于算术精度运算,尽量使用BigDecimal而不是Double字段。这负责将数据四舍五入到您需要的精度。您可以使用以下代码亲自查看:    Double a = 20.38    Double b = 20    println(a * b)    BigDecimal c = 20.38    BigDecimal d = 20    println(c * d)但是,如果您不能更改变量的类型,则可以使用十进制格式将输出格式化为您想要的格式    String pattern = "##,##0.00";    DecimalFormat decimalFormat = new DecimalFormat(pattern);    println(decimalFormat.format(c * d))    println(decimalFormat.format(a * b))至于为什么双打会这样,归根结底是数字在内部表示的方式。有一些很好的博客介绍如何浮动/加倍松散数字精度(float precision loss)。长话短说,由于它在内存中表示的方式浮动/加倍松散精度,但 BigDecimal 表示不会遭受这种损失。以下是一些包含更多信息的链接。https://www.soa.org/news-and-publications/newsletters/compact/2014/may/com-2014-iss51/losing-my-precision-tips-for-handling-tricky-floating-point-arithmetic/ .https://en.wikipedia.org/wiki/Loss_of_significance。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java