爪哇。如何为双倍值设置精度?

我最近在处理数字问题,我遇到一个情况,我想把一个双倍值的精度设置为6位数或4位数,这取决于数据库中存储的数值。

例如,如果数据库中的精度被设置为4位,那么输出必须是这样的。

10.0000.

我试着用 "DecimalFormat "和使用字符串 "##.####",但每次都要使用符号,很烦人。

有没有什么更好的方法,比如说像下面这样。

Double value = 10.0;
value.setPrecision(4);
解决办法

你不能将double(或Double)的精度设置为指定的小数位数,因为浮点值没有小数位。它们有二进制数字。

你必须通过BigDecimal'或DecimalFormat'转换为十进制,这取决于你以后想对该值做什么。

参见我对[这个问题]的回答(https://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java/12684082#12684082),以驳斥那些不可避免的*100/100的答案

评论(0)

double "和 "float "的精度由其大小和IEEE浮点类型的实现方式决定。

另一方面,输出中的小数位数是格式化的问题。你是对的,反复输入同一个常数是个坏主意。你应该声明一个字符串常数,并使用其符号表示。

private static final String DBL_FMT = "##.####";

使用符号表示法可以让你在所有使用该常量的地方改变精度,而不需要在代码中搜索。

评论(0)

为了扩展@EJP,在处理双倍数时,'精度的概念是非常混乱的。正如在https://stackoverflow.com/a/3730040/390153 中所讨论的那样,无论精度如何,你甚至不能将0.1表示为双数,同样的道理,你也不能用有限的精度来表示10进制的1/3。

你需要考虑你所要解决的问题,并考虑。

a) 我是否应该首先使用双数;如果精度是一个相关的概念,那么使用双数很可能是一个错误。

b) 如果双倍数是合适的,我所说的精度是什么意思?如果你只是在讨论显示问题,那就把逻辑包在一个显示函数中,这样你就只需要在一个地方处理它了;也就是说,应用DRY原则。

评论(0)