2010-12-12 10 views
5

私はそれらを表示しているときに、私の二重の値のすべてを、設定された桁数にフォーマットするDecimalFormatオブジェクトを持っています。私は通常小数点以下2桁までフォーマットしたいと思いますが、私は常に少なくとも1桁の有効桁が必要です。たとえば、私の値が0.2の場合、私のフォーマッタは0.20を吐き出し、それは素晴らしいことです。しかし、私の値が0.000034なら私のフォーマッタは0.00を吐き出し、私はフォーマッタが0.00003を吐き出すことを好みます。Java/Androidで少なくとも1つの有効数字の2倍のフォーマット

Objective-Cの数値フォーマッタは、これを非常に簡単に行います。表示する数字の最大桁数と最小有効桁数を1に設定するだけで、目的の出力が得られます私はJavaでやっていますか?

誰かが私に提供できる助けに感謝します。

カイル

編集:私は0.00004よう0.000037表示された値を丸めに興味があります。

答えて

2

この操作を頻繁に実行すると別の解決策を試してみることにしますが、時折このメソッドを呼び出すだけで動作します。

import java.text.DecimalFormat; 
public class Rounder { 
    public static void main(String[] args) { 
     double value = 0.0000037d; 
     // size to the maximum number of digits you'd like to show 
     // used to avoid representing the number using scientific notation 
     // when converting to string 
     DecimalFormat maxDigitsFormatter = new DecimalFormat("#.###################"); 
     StringBuilder pattern = new StringBuilder().append("0.00"); 
     if(value < 0.01d){ 
      String s = maxDigitsFormatter.format(value); 
      int i = s.indexOf(".") + 3; 
      while(i < s.length()-1){ 
       pattern.append("0"); 
       i++; 
      } 
     } 
     DecimalFormat df = new DecimalFormat(pattern.toString()); 
     System.out.println("value   = " + value); 
     System.out.println("formatted value = " + maxDigitsFormatter.format(value)); 
     System.out.println("pattern   = " + pattern); 
     System.out.println("rounded   = " + df.format(value)); 
    } 
} 
+0

ありがとう、cyber-monk、ちょうど私が必要とするもののように見える! –

+0

@Kyle、あなたの歓迎! –

0
import java.math.BigDecimal; 
import java.math.MathContext; 


public class Test { 

    public static void main(String[] args) { 
     String input = 0.000034+""; 
     //String input = 0.20+""; 
     int max = 2; 
     int min =1; 
     System.out.println(getRes(input,max,min)); 
    } 

    private static String getRes(String input,int max,int min) { 
     double x = Double.parseDouble(((new BigDecimal(input)).unscaledValue().intValue()+"").substring(0,min)); 
     int n = (new BigDecimal(input)).scale(); 
     String res = new BigDecimal(x/Math.pow(10,n)).round(MathContext.DECIMAL64).setScale(n).toString(); 
     if(n<max){ 
      for(int i=0;i<max;i++){ 
       res+="0"; 
      } 
     } 
     return res; 
    } 
} 
+0

Hey Zawhtut!まず、返信いただきありがとうございます。私にはさらに2つの質問があります。まず、切り捨てではなく丸めに興味があるので、0.000037を0.00003ではなく0.00004としたいと思います。第2に、元の数字が0.0000372の場合、入力番号の最​​後の有効数字がe-7の場所であるため、入力したアルゴリズムが3e-7を返すように見えます。私はそれを根拠にしていませんか?あなたが提供できる追加の説明をお寄せいただきありがとうございます! –

+0

こんにちはカイル。あなたはすでに答えがあるようです。途中で良い質問。 – zawhtut

関連する問題