Попробуйте это:
public static int getNumberOfFractionDigits(Number number) {
if( number == null ) return 0; //or throw
if( number.doubleValue() == 0.0d ) return 0;
BigDecimal bd = new BigDecimal(number.toString());
//BigDecimal bd = BigDecimal.valueOf(number.doubleValue()); // if double precision is ok, just note that you should use BigDecimal.valueOf(double) rather than new BigDecimal(double) due to precision bugs in the latter
bd = bd.stripTrailingZeros(); //convert 1.00 to 1 -> scale will now be 0, except for 0.0 where this doesn't work
return bd.scale();
}
Редактировать:
Если число на самом деле является итератором (т.е. дробь 0), оно все равно вернет 1. Таким образом, вы можете проверить, действительно лисначала дробная часть.
Edit2:
stripTrailingZeros()
, кажется, добивается цели, за исключением 0.0d.Соответственно обновил код.