1

在我的 Java 类介绍中,我被困在一个项目上。

我们必须创建一个将数字转换为定点数的代码。我的那部分没问题,但我卡在我们作业的数学部分。我们必须使用 (scalar (float) 方法进行加法、减法、乘法运算,以及使用标量 (float) 方法进行除法。

这是我到目前为止的代码。如果有人能帮助我指出正确的方向来获得第二个数字输出并将这两个数字相加,我将不胜感激。

public class FixedNumber {
public static final int lastSix = Integer.parseInt("111111", 2);
int value;
int value2;

public FixedNumber(int value) {
    this.value = value << 6;
}
public FixedNumber(int integral, float decimal) {
    this.value = (integral << 6) + (int)(decimal % 1 * 50);
}
public FixedNumber(float value) {
    this.value = ((int)value << 6) + (int)(value % 1 * 50);
}
public String toString() {
    return (value >> 6) + "." + ((value & lastSix) * 2);
    //return "" + ((value << 26) >>> 26);
}
public static void main(String[] args) {
    FixedNumber number = new FixedNumber(12786783, 0.87654f); //integral, decimal
    FixedNumber number2 = new FixedNumber(3.876545f); //value
    System.out.println(number);
    System.out.println(number2);
}
}
4

2 回答 2

2

为类中的每个操作创建一个方法FixedNumber。该方法将作用于当前的 FixedNumber 对象 ( this) 和传入的参数。

public FixedNumber add(FixedNumber toAdd) {
    // adds the two numbers and returns the result
}

public FixedNumber multiply(FixedNumber toMultiply) {
    // multiplies the two numbers and returns the result
}

// ... etc ...

您可以查看BigDecimal 的源代码以查看示例。

于 2012-07-11T22:46:17.417 回答
0

我认为固定点有点尴尬(移动六个位置?1/50 单位?)。我会从这样的事情开始:

public class MyBigDecimal {
    private long scaledValue;
    private int decimalPlaces;
    public MyBigDecimal(double v, int places) {
        long factor = (long)Math.pow(10.0, places);
        scaledValue = Math.round(v * factor);
        decimalPlaces = places;
    }

    public double doubleValue() {
        double factor = Math.power(10.0, decimalPlaces);
        return scaledValue / factor;
    }

}

如果您想使用既不是十进制也不是二进制的其他“定点”进行操作,您肯定会遇到挑战。

于 2012-07-11T23:24:18.333 回答