これは私が倍数を小数点以下2桁に丸めるためにしたことです:
amount = roundTwoDecimals(amount);
public double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
これは、量= 25.3569またはそのような場合にうまく機能しますが、量= 25.00または量= 25.0の場合、25.0になります!私が欲しいのは、丸めと小数点以下2桁までの書式設定の両方です。
お金で働いていますか? String
を作成し、それを元に戻すことはかなりループします。
BigDecimal
を使用します。これは非常に広範囲に議論されています。 Money
クラスが必要で、金額はBigDecimal
である必要があります。
お金を扱っていない場合でも、BigDecimal
を検討してください。
使用するだけ:(パイのように簡単)
double number = 651.5176515121351;
number = Math.round(number * 100);
number = number/100;
出力は651.52になります
数字のプレースホルダー(0
)を使用します。「#
」のように、末尾/先頭のゼロは不在として表示されます。
DecimalFormat twoDForm = new DecimalFormat("#.00");
することはできません「倍数は小数点以下を[任意の数]に丸めます」、なぜなら倍数には小数点がないためです。 base-10には小数点以下の桁があるため、doubleを小数点以下Nのbase-10文字列に変換できますが、元に戻すとbinary小数点以下の桁数で二重ランドに戻ります。
これを使って
String.format( "%。2f"、doubleValue)//要件に応じて2を変更します。
これは私が作ることができる最も簡単なものですが、ほとんどの例よりもはるかに簡単に作業を完了できます。
double total = 1.4563;
total = Math.round(total * 100);
System.out.println(total / 100);
結果は1.46です。
Apache commonのorg.Apache.commons.math.util.MathUtilsを使用できます
double round = MathUtils.round(double1, 2, BigDecimal.ROUND_HALF_DOWN);
Apache Commons Mathを使用できます。
Precision.round(double x, int scale)
倍額= 25.00;
NumberFormat formatter = new DecimalFormat( "#0.00");
System.out.println(formatter.format(amount));
DecimalFormat df = new DecimalFormat("###.##");
double total = Double.valueOf(val);
Moneyクラスは、Longのサブクラスとして表すことも、ネイティブのlongとしてmoney値を表すメンバーを持つこともできます。次に、お金のインスタンス化に値を割り当てるとき、実際に実際のお金の値である値を常に保存します。 Moneyオブジェクトを(MoneyのオーバーライドされたtoString()メソッドを介して)適切なフォーマットで出力するだけです。例えば、Moneyオブジェクトの内部表現の$ 1.25は125です。お金をセント、ペンス、または封印している通貨の最小額面で表現します。その後、出力でフォーマットします。いいえ、「1.257ドル」などの「違法な」金額を保存することはできません。
これを試すことができます:
public static String getRoundedValue(Double value, String format) {
DecimalFormat df;
if(format == null)
df = new DecimalFormat("#.00");
else
df = new DecimalFormat(format);
return df.format(value);
}
または
public static double roundDoubleValue(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
最初にDecimalFormat
クラスのオブジェクトを宣言します。 DecimalFormat
内の引数は#.00
であることに注意してください。これは、小数点以下2桁の正確な丸めを意味します。
private static DecimalFormat df2 = new DecimalFormat("#.00");
次に、フォーマットをdouble値に適用します。
double input = 32.123456;
System.out.println("double : " + df2.format(input)); // Output: 32.12
double input = 32.1;
の場合の注意
その場合、出力は32.10
などになります。
次に、myFixedNumberを小数点以下2桁に丸めて出力することを保証する簡単な方法を示します。
import Java.text.DecimalFormat;
public class TwoDecimalPlaces {
static double myFixedNumber = 98765.4321;
public static void main(String[] args) {
System.out.println(new DecimalFormat("0.00").format(myFixedNumber));
}
}
結果は:98765.43
結果を小数点以下2桁にしたい場合は、次のようにします。
// assuming you want to round to Infinity.
double tip = (long) (amount * percent + 0.5) / 100.0;
この結果は正確ではありませんが、Double.toString(double)はこれを修正し、小数点以下1〜2桁を出力します。ただし、別の計算を実行するとすぐに、暗黙的に丸められない結果を取得できます。 ;)
ここで、numは二重数です
ここでは、2つの10進数の宮殿を取ります。
System.out.printf( "%。2f"、num);
この機能を使用できます。
import org.Apache.commons.lang.StringUtils;
public static double roundToDecimals(double number, int c)
{
String rightPad = StringUtils.rightPad("1", c+1, "0");
int decimalPoint = Integer.parseInt(rightPad);
number = Math.round(number * decimalPoint);
return number/decimalPoint;
}
Java 1.8以降では、ラムダ式をさらに使用して、nullをチェックできます。また、以下のいずれかは、FloatまたはDoubleと可変小数点数(2 :-)を含む)を処理できます。
public static Double round(Number src, int decimalPlaces) {
return Optional.ofNullable(src)
.map(Number::doubleValue)
.map(BigDecimal::new)
.map(dbl -> dbl.setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP))
.map(BigDecimal::doubleValue)
.orElse(null);
}
int i = 180;
int j = 1;
double div= ((double)(j*100)/i);
DecimalFormat df = new DecimalFormat("#.00"); // simple way to format till any deciaml points
System.out.println(div);
System.out.println(df.format(div));
金額が正と負の両方であると仮定すると、小数点以下2桁に丸めるには、次のコードスニペットを使用できます。
amount = roundTwoDecimals(amount);
public double roundTwoDecimals(double d) {
if (d < 0)
d -= 0.005;
else if (d > 0)
d += 0.005;
return (double)((long)(d * 100.0))/100);
}
Math.round
は1つの答えです。
public class Util {
public static Double formatDouble(Double valueToFormat) {
long rounded = Math.round(valueToFormat*100);
return rounded/100.0;
}
}
void "test double format"(){
given:
Double performance = 0.6666666666666666
when:
Double formattedPerformance = Util.formatDouble(performance)
println "######################## formatted ######################### => ${formattedPerformance}"
then:
0.67 == formattedPerformance
}