【问题标题】:Finding number of digits before a decimal point in java在java中查找小数点前的位数
【发布时间】:2016-02-24 19:52:28
【问题描述】:

我已经声明了我正在使用的双精度变量:

z= 345.876;

现在我想显示小数点前的位数。我尝试执行以下操作:

String string_form = new Double(z).toString().subString(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);

我收到一条错误消息:“方法 subString(int, int) 未定义为 String 类型”

然后快速修复显示将其更改为小写:子字符串。然而,错误随后更改为字符串“string_form”,表示它未初始化。关于做什么的任何想法?

还有我将如何修改它以找到数字后面的位数?我知道部分

.indexOf('.') 

我会用数字替换小数点,但我将如何更改它以显示数字之后的位数,而不是之前?谢谢。是的,我已经导入了十进制格式的文本语言。

【问题讨论】:

  • 不要更改问题,但您应该使用 Math.log 而不是计算字符串中的数字。

标签: java decimalformat


【解决方案1】:

您在实际创建它之前尝试使用 string_form。

如果你打破了

String string_form = new Double(z).toString().substring(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);

进入

String string_temp = new Double(z).toString();
String string_form = string_temp.substring(0,string_temp.indexOf('.'));
double t = Double.valueOf(string_form);

那么它应该可以工作了。

要获取小数点后的数字,只需从句点到数字末尾的数字即可。

String string_temp = new Double(z).toString();
String string_form = string_temp.substring(string_temp.indexOf('.'), string_temp.length());
double t = Double.valueOf(string_form);

正如其他人指出的那样,有许多比转换为字符串并检查句点并重新转换更好的方法。

【讨论】:

  • 啊,我明白了。谢谢。语法错误似乎已解决,但变量 t 显然显示为未在本地使用,因此它不会遗憾地读取变量。添加 surpresswarnings 会有帮助吗?
  • 不,您不需要这样做。警告是因为您创建了一个变量 t 但尚未使用它。在对它进行任何操作(即在某行中使用它、打印它等)之后,该警告将消失。
  • 嗨,布伦丹。您的书面代码适用于选择小数点前的数字,但不适用于选择小数点后的数字。如果你能帮助我,这是我的代码。 String getAcreIntoString = new BigDecimal(String.valueOf(acre)).toString(); String getAcreDigit = getAcreIntoString.substring( getAcreIntoString.indexOf('.'), getAcreIntoString.length());
【解决方案2】:

小数点前的小数位数由下式给出

(int)Math.log10(z)+1

它后面的小数位数不精确,取决于您在转换为十进制时使用的精度。浮点值没有小数位,有二进制位,两者不可通约。

【讨论】:

    【解决方案3】:

    只需将双精度转换为字符串。找到 的索引。与indexOf。获取字符串的长度。减去 的索引。从长度,你应该有计数。

    【讨论】:

      【解决方案4】:
      String string_form = Double(z).toString();
      int index = string_form.indexOf('.');
      double d = Double.parse(string_form.substring(0, index+1));
      

      如果数量少,你可以试试

      int i = (int) z; 
      

      long l = Math.round(z);
      

      【讨论】:

        【解决方案5】:

        您在表达式string_form.indexOf('.') 中使用了string_form,但它尚未初始化,因为它只是在调用substring() 之后设置。您需要将toString() 的值存储在一个临时变量中,这样您就可以在对substring() 的调用中访问它。像这样的

        String stringForm = new Double(z).toString();
        stringForm = stringForm.substring(stringForm.indexOf('.'));
        

        不过,还有其他更好的方法可以做到这一点。 Math.floor(z) 甚至只是一个演员 (long)z 都可以。

        【讨论】:

          【解决方案6】:

          可以这样做,例如:

          Integer.parseInt(String.valueOf(possibleBirths).split(".")[0]);
          

          【讨论】:

            【解决方案7】:

            你可以做接下来的事情:

            Double z = 345.876;
            int a = t.intValue();
            int counter = 0;
            while(a != 0) {
              counter++;
              a = a / 10;  }
            System.out.println(counter);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-09-18
              • 2023-03-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多