固定点数

时间:2012-07-11 22:30:47

标签: java fixed-point

我在Java类的介绍中遇到了一个项目。

我们必须创建一个将数字转换为固定点数的代码。我有那个部分没关系,但我被困在哪里是我们任务的数学部分。我们必须加,减,多个w /(标量(浮点)方法,并用标量(浮点)方法除。

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

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);
}
}

2 个答案:

答案 0 :(得分:1)

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 ...

您可以查看source for BigDecimal以查看示例。

答案 1 :(得分:0)

我认为固定点有点尴尬(转移6个位置?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;
    }

}

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