double中的小数位数

Ans*_*hul 31 java double

我需要像234.12413Java中那样的数字中的整数位数和小数点后的位数.

Pet*_*rey 45

双精神并不总是精确的表示.您只能说将它转换为String时会有多少小数位.

double d= 234.12413;
String text = Double.toString(Math.abs(d));
int integerPlaces = text.indexOf('.');
int decimalPlaces = text.length() - integerPlaces - 1;
Run Code Online (Sandbox Code Playgroud)

这仅适用于未转换为指数表示法的数字.您可能会认为1.0有一个或没有小数位.

  • 正如Fenix所说,你的解决方案的一个反例就是10,000,000.`Double.toString(10000000)`返回`1.0E7`.但是,如果你通过我的方法运行这个数字,那么`10000000.0D*Math.pow(10,0)%1 == 0`将为真,并且函数将返回0.不幸的是,每个注释没有足够的字符适合该方法的完整实现.(我修改了方法,所以在顶部没有if语句了). (4认同)
  • 这是一个不错的答案,但是它不可靠,因为它不能用于任何倍数。通过遍历十的幂,并检查'​​dbl * pow(10,i)%1 == 0'是否正确,我能够使用数学解决此问题。如果该陈述为真,则小数位数为“ i”。在方法的开头添加一个“ if”以检查双精度数是否没有小数:“ if(dbl ==(int)dbl){return 0;}”完成了该方法。 (3认同)
  • 这个方法最终会失败,因为转换`toString()`使用操作系统的小数分隔符,并非所有的操作系​​统都使用点`.`作为小数分隔符而你使用的是字面点,因此它只能在某些环境中使用在某些情况下.更好的方法是使用:`new DecimalFormat("#.#########").format(Math.abs(value)).replace(",",".")`以确保你的`text`变量总是会收到一个文字点. (2认同)

Bad*_*llz 16

Double d = 234.12413;
String[] splitter = d.toString().split("\\.");
splitter[0].length();   // Before Decimal Count
splitter[1].length();   // After  Decimal Count
Run Code Online (Sandbox Code Playgroud)

  • 应拆分("\\.") (2认同)

Pri*_*ley 9

    String s = "" + 234.12413;
    String[] result = s.split("\\.");
    System.out.println(result[0].length() + " " + result[1].length());
Run Code Online (Sandbox Code Playgroud)