たとえば、変数3.545555555がありますが、これを3.54に切り捨てます。
回答:
表示目的で使用する場合は、次を使用しますjava.text.DecimalFormat
。
new DecimalFormat("#.##").format(dblVar);
計算に必要な場合は、次を使用しますjava.lang.Math
。
Math.floor(value * 100) / 100;
floor
切り捨てに使用すると、正の値でのみ機能します。
RoundingMode.DOWN
、RoudingMode.FLOOR
常に負の無限大に丸めるように適切に行われます。
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
最初に、a double
は2進数であり、実際には小数点以下の桁数がないことに注意してください。
小数点以下の桁数が必要な場合BigDecimal
は、setScale()
切り捨てを行うメソッドを持つを使用DecimalFormat
するか、を使用してを取得しString
ます。
何らかの理由で、あなたが使用しない、場合BigDecimal
、あなたはあなたをキャストすることができますdouble
しint
、それを切り捨てること。
Onesの場所に切り詰める場合:
int
十の場所:
int
double
百ヶ所
例:
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
は、行きたい場所をPASTした場所の数になるので、1は10の位に、2は100の位に丸めます。位に丸めます(0は1の位に丸め、負の1は10の位に丸めます)。、など)
unroundedNumber
十分に大きければ実質的に乱数になります。問題の例では機能する可能性がありますが、一般的な解決策はどのでも機能するはずdouble
です。
文字列としてフォーマットし、doubleに変換すると、希望する結果が得られると思います。
double値は、round()、floor()、ceil()にはなりません。
それの簡単な修正は次のとおりです:
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
表示にはsValueを、計算にはnewValueを使用できます。
NumberFormat Classオブジェクトを使用して、タスクを実行できます。
// 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
簡単なチェックは、Math.floorメソッドを使用することです。小数点以下2桁以下のdoubleをチェックするメソッドを作成しました。
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;
}
Maniのわずかに変更されたバージョンがあります。
private static BigDecimal truncateDecimal(final double x, final int numberofDecimals) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_DOWN);
}
public static void main(String[] args) {
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(3.545555555, 2));
System.out.println(truncateDecimal(9.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.0, 2));
System.out.println(truncateDecimal(-3.545555555, 2));
}
出力:
0.00
9.62
9.62
9.62
9.62
9.99
9.00
3.54
-9.62
-9.62
-9.62
-9.62
-9.99
-9.00
-3.54
これは私のために働きました:
double input = 104.8695412 //For example
long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;
//result == 104.87
私がこのバージョンを個人的に気に入っているのは、文字列(または類似のもの)に変換してからフォーマットするのではなく、実際に数値的に丸めを実行するためです。
//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
これは少し扱いにくいかもしれませんが、問題を解決できると思います:)