有没有办法在java double中获得小数点后的位数?

Ele*_*hoy 3 java floating-point groovy approximation

我正在开发Java/Groovy程序.我有一个双变量,它包含一个用户输入的数字.我真正想知道的是用户在小数点右侧键入了多少个数字.就像是:

double num = 3.14
num.getPlaces() == 2
Run Code Online (Sandbox Code Playgroud)

当然,你不能用double来做这个,因为那是使用IEEE浮点数而且它都是近似值.

假设我无法获取用户输入的字符串,但只能访问已存储的值的double,有没有办法可以通过BigDecimal擦除那个double,或者某些东西可以得到"真实"的数字小数位?(当双重显示在屏幕上时,它会正确,所以我认为有一种方法至少可以猜到吗?)

Jon*_*eet 14

不,你不能......因为用户可以输入许多不同的字符串,所有字符串都将被解析为相同的值.

"真实"数字几乎肯定比用户输入的数字小一些.例如,3.14存储为3.140000000000000124344978758017532527446746826171875.我不认为你要显示的是用户.

为了使问题更清楚,您无法从double值告诉用户是否实际输入了:

3.14
3.140
3.140000
3.14000000000000012434
Run Code Online (Sandbox Code Playgroud)

这四个字符串都会给你相同的值 - 这应该很明显你不可能回到用户键入的内容.

如果在所有可能的话,改变解析代码,并使用BigDecimal贯穿始终.

  • @ R.Bemrose:你相信3.14的数字永远不会出现在任何地方,如果它实际上意味着pi吗? (9认同)