1

重複の可能性:
Javaで数値を小数点以下n桁に丸める方法

この形式のメソッドを使用して、指定された小数点以下の桁数をfloat(またはdouble)に設定したい

public float decimalDigits(int x, float n){
....
}

例えば

->私が持っている場合

float n1=36.58529

この線

float n2=decimalDigits(2, n1);

戻る必要があります

n2=36.59

-> n1の場合:

float n1=36.58329

この線

float n2=decimalDigits(2, n1);

戻る必要があります

n2=36.58

この線

float n2=decimalDigits(1, n2);

戻る必要があります

n2=36.6

4

3 に答える 3

3

これを使って

public float decimalDigits(int decimaldigits, float x){
            final NumberFormat numFormat = NumberFormat.getNumberInstance();
            numFormat.setMaximumFractionDigits(decimaldigits);
            final String resultS = numFormat.format(x);
            String parsable=resultS.replace(".", "");
            parsable=resultS.replace(",", ".");
            float ris=Float.parseFloat(parsable);
            return ris;
        }

ドット規則によって引き起こされる解析の問題を回避するために、コードに文字列の置換を追加しました (たとえば、1234.34 は、float での再解析でエラーを引き起こすフォーマットの後に 1.234,34 になります)。

あなたが単にフォーマットの視覚化の問題である場合は、文字列を使用することもでき、浮動小数点変数に小数点以下の桁数がないことは問題ではないため、これは別の有効な方法です。

public String decimalDigits(int decimaldigits, float x){
        final NumberFormat numFormat = NumberFormat.getNumberInstance();
        numFormat.setMaximumFractionDigits(decimaldigits);
        final String resultS = numFormat.format(x);
        return resultS;
    }

誰かがこのソリューションの有効性について疑問を持っている場合は、詳細を尋ねるか、コードをコンパイルしてテストしてから反対票を投じてください。コードはテスト済みで、魅力的に機能します。

警告

メソッドはFloat.parseFloatを使用するため、明らかにfloatを渡す必要があります。doubleを渡したい場合は、メソッドに渡す前に float へのキャストを使用する必要があります。そうでない場合は、すべてのメソッド プリミティブを変更して float から parse する必要がありますダブル。double と float は異なります。

于 2012-12-24T01:04:39.487 に答える
0

floataまたはaを返すルーチンが、double36.59や36.6などの正しく丸められた値を返すことは不可能です。これらの値は、2進浮動小数点では表現できないためです。バイナリ浮動小数点は、36.60000000000000142108547152020037174224853515625などの近い値のみを返すことができます。値36.6を表すバイナリ浮動小数点にはビットパターンはありません。

10進値が必要な場合は、DecimalFormatやBigDecimalなどの10進基数を使用する必要があります。

于 2012-12-24T00:45:33.230 に答える
-1

考えられる擬似コードは次のとおりです。

public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(decimalDigits(10.09872, 4));
    }

     static double decimalDigits(double value, int n)
    {
        double decimal = value - ((int) value);
        System.out.println(decimal);

        double short_decimal = 0;
        for(int i = 0; i < n; i++)
        {
            /* current digit on decimal */
            decimal = decimal * 10;
            System.out.println(decimal);
            short_decimal += (Math.pow(10, n - i - 1) * (int)decimal);

            /* find further */
            decimal = decimal - (int)decimal;
        }

        return (int)value + (double)(short_decimal / Math.pow(10, n));
    }

}
于 2012-12-24T00:47:20.117 に答える