1

Java クラスの紹介でプロジェクトに行き詰まっています。

数値を固定小数点数に変換するコードを作成する必要があります。その部分は問題ありませんが、行き詰まっているのは課題の数学部分です。足し算、引き算、(scalar (float) メソッドでの乗算)、scalar (float) メソッドでの除算が必要です。

ここに私がこれまでに持っているコードがあります。誰かが私を正しい方向に向けて、2番目の数値出力を取得し、2つの数値を加算するのを助けることができれば、私はそれを感謝します.

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

定点がちょっとおかしいと思います(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;
    }

}

10 進数でも 2 進数でもない他の "固定小数点" で操作したい場合は、確かに課題があります。

于 2012-07-11T23:24:18.333 に答える