在Java中如何确定类似于234.12413
的数字有多少个整数位和小数位。
在Java中如何确定类似于234.12413
的数字有多少个整数位和小数位。
double并不总是精确的表示方式。只有当你将其转换为字符串时,才能确定它有多少位小数。
double d= 234.12413;
String text = Double.toString(Math.abs(d));
int integerPlaces = text.indexOf('.');
int decimalPlaces = text.length() - integerPlaces - 1;
这种方法只适用于没有转换成指数符号的数字。你可以认为1.0有一位或零位小数。
toString()
使用操作系统的小数分隔符,而不是所有操作系统都使用点 .
作为小数分隔符,而你正在使用字面上的点,因此它只能在某些环境和某些情况下工作。更好的方法是使用:new DecimalFormat("#.#########").format(Math.abs(value)).replace(",",".")
来确保你的 text
变量始终接收到一个字面上的点。 - Joe AlmoreDecimalFormat
解决这个问题。同样的问题也可以用toString()
或"" + doubleValue
的方式解决。 - Fenixdbl * pow(10, i) % 1 == 0
是否为真来确定小数位数 i
。如果该语句为真,则小数位数为i
。在方法开始处添加一个条件判断,检查双精度数是否没有小数部分:if(dbl == (int)dbl) {return 0;}
即可完成该方法。 - Ian S.Double.toString(10000000)
可以得到 1.0E7
。但是,如果你按照我的方法运行这个数字,那么 10000000.0D * Math.pow(10, 0) % 1 == 0
将会是真的,并且函数将返回0。很遗憾,每个评论中的字符不足以容纳该方法的完整实现。(我已经修改了该方法,所以顶部没有if语句了。) - Ian S.Double d = 234.12413;
String[] splitter = d.toString().split("\\.");
splitter[0].length(); // Before Decimal Count
splitter[1].length(); // After Decimal Count
Double
而不是小写的 double
,注意 D ouble 的大小写。 - Seega\\.
正则表达式无法工作,请尝试使用 [.]
。这对我起作用了。 - cpinamtz String s = "" + 234.12413;
String[] result = s.split("\\.");
System.out.println(result[0].length() + " " + result[1].length());
1) 转换为字符串
2) 从“.”开始截取到结尾
3) 获取该子字符串的长度