Örneğin, 3.545555555 değişkenine sahibim, bunu sadece 3.54'e düşürmek istiyorum.
Örneğin, 3.545555555 değişkenine sahibim, bunu sadece 3.54'e düşürmek istiyorum.
Yanıtlar:
Bunu görüntüleme amacıyla kullanmak istiyorsanız, şunu kullanın java.text.DecimalFormat:
new DecimalFormat("#.##").format(dblVar);
Hesaplamalar için ihtiyacınız varsa, şunu kullanın java.lang.Math:
Math.floor(value * 100) / 100;
flooriçin kullanmak yalnızca pozitif değerler için işe yarar.
RoundingMode.DOWNgibi RoudingMode.FLOORnegatif sonsuzluğa doğru doğru bir şekilde yapılır .
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
Mevcut kontrol edin RoundingModeve DecimalFormat.
DOWN, bu gerçekten hem pozitif hem de negatif sayılar için kesme etkisine sahiptir. Gibi örnekler Tabloda görüldüğü doc .
Biraz Eski Forum, Yukarıdaki cevaplardan hiçbiri hem pozitif hem de negatif değerler için işe yaramadı (yani hesaplama için ve sadece Yuvarlama olmadan kesme yapmak için). Gönderen How Java n ondalık basamağa sayıya yuvarlamak için bağlantı
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);
}
}
Bu yöntem benim için iyi çalıştı.
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));
Sonuçlar :
0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
Not öncelikle bir o doubleikili kesir ve gerçekten değil sahip ondalık basamak.
Eğer yerleri onluya Eğer gerekirse, bir kullanmak BigDecimalbir olan, setScale()budamaya yöntem veya kullanımını DecimalFormatbir olsun String.
Her ne sebeple olursa olsun, a kullanmak istemiyorsanız, onu kesmek için bir ' e BigDecimalçevirebilirsiniz .doubleint
Ones yerine kısaltmak istiyorsanız :
intTo onluk bir yerde:
intdoubleHundreths yeri
Misal:
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;
}
Bu örnekte, decimalPlacesolanları gitmek istediğiniz yere gönderilen yerlerin sayısı olacağını, bu nedenle 1 olur yuvarlak için onda yerde, 2 yüzde biri ve bu yüzden (0 turlarında olanlar yerinde ve onlarca negatif biri , vb.)
unroundedNumberyeterince büyükse etkili bir şekilde rastgele sayılarla sonuçlanacaktır . Sorudaki örnek için işe yarayabilir, ancak genel bir çözüm herhangi biri için çalışmalıdır double.
Bir dizge olarak biçimlendirmek ve tekrar ikiye dönüştürmek bence size istediğiniz sonucu verecektir.
Çift değer round (), floor () veya ceil () olmayacaktır.
Bunun için hızlı bir düzeltme şunlar olabilir:
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
SValue değerini görüntüleme amacıyla veya newValue değerini hesaplama için kullanabilirsiniz.
Görevi gerçekleştirmek için NumberFormat Class nesnesini kullanabilirsiniz.
// 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
İşte kullandığım yöntem:
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
Bu aynı zamanda yapılabilir:
a=Math.floor(a*100) / 100;
Belki aşağıdaki:
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
Hızlı bir kontrol, Math.floor yöntemini kullanmaktır. Aşağıda iki veya daha az ondalık basamak için bir çift kontrol etmek için bir yöntem oluşturdum:
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'nin biraz değiştirilmiş bir versiyonuna sahibim .
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));
}
Çıktı:
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
Bu benim için çalıştı:
double input = 104.8695412 //For example
long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;
//result == 104.87
Ben şahsen bu sürümü seviyorum çünkü yuvarlamayı bir String'e (veya benzerine) dönüştürüp sonra biçimlendirmek yerine sayısal olarak gerçekleştiriyor.
//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
Pekala, bu biraz tuhaf olabilir, ancak sorununuzu çözebileceğini düşünüyorum :)