爪哇 |将双精度拆分为 2 个整数|使用带有 str 缓冲区的子字符串和值时出错



这是我在此站点上的第一个问题。我要做的是使用1个实例变量创建一个矩阵数组。

长话短说,我试图使用双重并将每个"侧面"用作单独的"实例变量"。

它确实有效,一次...尝试再次使用它后,我得到了:

at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)

我的问题是:

  1. 为什么它无法运作不止一次,为什么发生错误?
  2. 有更好的方法吗?(虽然仍然只使用1个实例变量)

这是我的一些代码:

/**
 * Get the fractional part of the double
 * @return the fractional part as an int
 */
private int getY() {
    String buffer = "";
    int i = 0;
    double xyCopy = _xy; 
    while (xyCopy > 0) { 
        xyCopy = (int) ((int) xyCopy / 10);
        i++;
    }
    buffer = String.valueOf(_xy);
    buffer = buffer.substring(i + 1);
    i = Integer.valueOf(buffer);
    return i;
}
private void setY(int yDimension) {
    int i=0;
    double yCopy = yDimension; 
    while (yCopy > 0) {
        yCopy = (int) ((int) yCopy / 10);
        i++;
    }
    _xy = _xy + (yDimension * Math.pow(10, -i));
}

为什么如此复杂?您可以同时使用字符串将分数零件作为整数这样:

String s = String.valueOf(someDouble);
int after = s.indexOf('.');
int fractional = Integer.valueOf(s.substring(after + 1));

我建议首先解析字符串double,然后将其施放为int或long。这样,即使它不适合int或很长时间,您也会得到截断的值

    double d = 1.7777777777777777777772;
    String s = d+"";
    int pos = s.indexOf(".");
    long value = 0;
    if(pos>=0){
        String frac = s.substring(pos+1);
        value = (long)Double.parseDouble(frac);
    }
    System.out.println(value);  

相关内容

最新更新