1

ここでフロートを切り捨てています。しかし、値が丸められています。それは望ましくありません。たとえば、値が 12.989 の場合 -> 12.98 のみとして出力する必要があります。Java 1.6 からのみサポートされているため、10 進形式の SetRoundingMode を使用できません。私のは1.5 JDKです。SetRoundingMode() メソッドを使用せずに誰かが私を助けてくれませんか????

        String pattern = "##,##0.00";        
        NumberFormat nf = NumberFormat.getNumberInstance();
        DecimalFormat df = (DecimalFormat)nf;      

        double fPart; 
        Float value=233.989f;
        String dstr = String.valueOf(value);
        dstr = dstr.substring(dstr.indexOf(".")+1);
        Long db = Long.valueOf(dstr);
        if(db > 0){
            df.applyPattern(pattern);
            System.out.println("input="+value+", fPart="+dstr);
        }        

        String output = df.format(value);

    System.out.println(output);
4

3 に答える 3

2

いつでも古い学校のトリックを使用できます。10^n で乗算し、切り捨て、10^n で除算します。

float x = 233.989f;
x = (float)(Math.floor(x * 100) / 100);

BigDecimal も試しました。

MathContext mc = new MathContext(5, RoundingMode.FLOOR)
BigDecimal decimal = new BigDecimal(233.989, mc);
System.out.println(decimal);

それは仕事をしますが、合計桁数を指定する必要があります。小数点以下2桁が必要で、小数点以下の桁数は気にしないと言うだけではいけません。つまり、 の最初のパラメータMathContextは 2 ではなく 5 です。このアプローチを選択すると、 で 10 進数以外の数字をすばやく計算できますMath.Ceil(Math.log10(x))

ノート:

  • 除算する場合 (最初のアプローチ)、オペランドの少なくとも 1 つが浮動小数点 (float または double) でなければなりません。
  • 文字列を操作する (コードを作成する) 場合、「.」を想定するのは安全ではありません。は小数点記号です
  • Math.floor を使用した小数の切り捨ては、正の値に対してのみ機能します
于 2012-05-04T08:20:27.877 に答える
0

問題が正しいかどうかわかりません。ただし、切り上げまたは切り捨てを行わずに切り捨てたい場合は、次のように使用できます DecimalFormat df = new DecimalFormat("##.##"); df.format(12.912385);

于 2012-05-04T07:57:01.490 に答える
-1

正規表現を使用して、「。」の後の2桁目を取得できます。次に、文字列を最初からその位置まで減算してから、文字列をfloatまたはdoubleに変換します。

Pattern pattern = Pattern.compile("regular expression");
Matcher matcher = pattern.matcher("your string");

if(matcher.find())
{
    int poz_begin = matcher.start();
    int poz_end = matcher.end();
}
于 2012-05-04T07:43:37.903 に答える