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贯穿始终.