在java中是否有任何内置函数告诉我double中有多少小数位.例如:
101.13 = 2
101.130 = 3
1.100 = 3
1.1 = 1
-3.2322 = 4 etc.
Run Code Online (Sandbox Code Playgroud)
如果需要,我很乐意首先转换为另一种类型,我已经考虑过转换为bigdecimal而没有运气.
And*_*anu 14
如果您将数字作为字符串传递,可以使用BigDecimal.scale():
BigDecimal a = new BigDecimal("1.31");
System.out.println(a.scale()); //prints 2
BigDecimal b = new BigDecimal("1.310");
System.out.println(b.scale()); //prints 3
Run Code Online (Sandbox Code Playgroud)
但是如果您已经将数字作为字符串,那么您可以使用正则表达式解析字符串以查看有多少位数:
String[] s = "1.31".split("\\.");
System.out.println(s[s.length - 1].length());
Run Code Online (Sandbox Code Playgroud)
使用BigDecimal可能有一个好处,它检查字符串是否实际上是一个数字; 使用字符串方法,你必须自己做.此外,如果您将数字设为双倍,则无法区分1.31
和1.310
(它们完全相同),就像其他人指出的那样.
没有.
1.100和1.1是完全相同的值(它们在a中逐位表示相同double
).
因此,你无法从a获得那种信息double
.
你唯一可以做的是让被解析到同一所必需的十进制数的小数的最小位数double
的值.这就像调用Double.toString()
和检查有多少十进制数字一样简单.
double 中的小数位数是 16。
64 位数字。52 位尾数。52 位大约是 16 位十进制数字。
请参阅http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html。
double,其值包括 64 位 IEEE 754 浮点数。
见http://en.wikipedia.org/wiki/IEEE_754-2008
归档时间: |
|
查看次数: |
43793 次 |
最近记录: |