たとえば、変数3.545555555があり、これを3.54に切り捨てます。
表示目的で使用する場合は、 Java.text.DecimalFormat
を使用します。
new DecimalFormat("#.##").format(dblVar);
計算に必要な場合は、 Java.lang.Math
を使用します。
Math.floor(value * 100) / 100;
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
使用可能な RoundingMode
および DecimalFormat
を確認してください。
ビットオールドフォーラム、上記の答えはいずれも正と負の値の両方で機能しませんでした(計算と丸めだけで切り捨てを行うことを意味します)。 Javaで数値を小数点以下n桁に丸める方法 リンクから
private static BigDecimal truncateDecimal(double x,int numberofDecimals)
{
if ( x > 0) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_FLOOR);
} else {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_CEILING);
}
}
この方法は私にとってはうまくいきました。
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
結果 :
0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
最初に、double
は2進小数であり、実際にはhave小数点以下ではないことに注意してください。
小数点以下の桁数が必要な場合は、BigDecimal
を使用します。これには、切り捨てのためのsetScale()
メソッドがあります。または、DecimalFormat
を使用してString
を取得します。
何らかの理由でBigDecimal
を使用したくない場合は、double
をint
にキャストして切り捨てることができます。
Onesの場所に切り捨てたい場合:
int
にキャストする1の場所へ:
int
にキャストdouble
にキャストバックHundreths場所
例:
static double truncateTo( double unroundedNumber, int decimalPlaces ){
int truncatedNumberInt = (int)( unroundedNumber * Math.pow( 10, decimalPlaces ) );
double truncatedNumber = (double)( truncatedNumberInt / Math.pow( 10, decimalPlaces ) );
return truncatedNumber;
}
この例では、decimalPlaces
は、行きたい場所を過ぎた場所の数であるため、1は10分の1の場所に丸められ、2は100分の1に丸められます。 on(0はonesの場所に丸め、負の1は10の桁に等々)
多分Math.floor(value * 100) / 100
? 3.54
のような値はdouble
で正確に表現されない場合があることに注意してください。
NumberFormatクラスオブジェクトを使用して、タスクを実行できます。
// Creating number format object to set 2 places after decimal point
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setGroupingUsed(false);
System.out.println(nf.format(precision));// Assuming precision is a double type variable
私が使用する方法は次のとおりです。
double a=3.545555555; // just assigning your decimal to a variable
a=a*100; // this sets a to 354.555555
a=Math.floor(a); // this sets a to 354
a=a/100; // this sets a to 3.54 and thus removing all your 5's
これも実行できます。
a=Math.floor(a*100) / 100;
3.545555555は3.54を取得します。これをフォローしてみてください:
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.FLOOR);
double result = new Double(df.format(3.545555555);
これにより、= 3.54になります!
文字列としてフォーマットし、ダブルに変換すると、あなたが望む結果が得られると思います。
Double値は、round()、floor()、ceil()にはなりません。
簡単な修正方法は次のとおりです。
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
表示目的にはsValueを、計算にはnewValueを使用できます。
//if double_v is 3.545555555
String string_v= String.valueOf(double_v);
int pointer_pos = average.indexOf('.');//we find the position of '.'
string_v.substring(0, pointer_pos+2));// in this way we get the double with only 2 decimal in string form
double_v = Double.valueOf(string_v);//well this is the final result
まあこれは少し厄介かもしれませんが、あなたの問題を解決できると思います:)
たぶん以下:
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
簡単なチェックは、Math.floorメソッドを使用することです。小数点以下2桁以下の倍精度をチェックするメソッドを作成しました。
public boolean checkTwoDecimalPlaces(double valueToCheck) {
// Get two decimal value of input valueToCheck
double twoDecimalValue = Math.floor(valueToCheck * 100) / 100;
// Return true if the twoDecimalValue is the same as valueToCheck else return false
return twoDecimalValue == valueToCheck;
}