2010-08-29 28 views
28

Olası Çoğalt: Ne var
Round a double to 2 significant figures after decimal point2. Tur için ondalık basamak

: Java kodum

mkm=((((amountdrug/fluidvol)*1000)/60)*infrate)/ptwt; 

. Kod düzgün çalışıyor ancak birkaç ondalık basamağa geri döner. Sadece 2 veya 3 ile nasıl sınırlandırabilirim? 1000 ile

+4

değil aynı içinde Round.round (targetvalue, roundToDecimalPlaces) olarak hod yuvarlak. Bağlantılı dupe adayı, değişkende saklanan değeri fiilen nasıl yuvarlaklayacağınız değil, yuvarlak bir sayının nasıl yazdırılacağını tartışır. – sblom

cevap

1

Çarp, yuvarlak ve temel Java için 1000

tarafından geri bölmek: http://download.oracle.com/javase/tutorial/getStarted/index.html ve

+0

Cevabınız için teşekkürler Thorbjorn. Temelde programda kullandığım uzak geçmişte, önerdiğin yöntemi kullanacağım (int (x) olmasa da). Bununla birlikte, android java'da bunu nasıl yapacağımı anlayamıyorum. – Alan

89

http://download.oracle.com/javase/tutorial/java/index.html çiftler kullanmayın. Bazı hassasiyeti kaybedebilirsiniz. İşte genel amaçlı bir işlev.

public static double round(double unrounded, int precision, int roundingMode) 
{ 
    BigDecimal bd = new BigDecimal(unrounded); 
    BigDecimal rounded = bd.setScale(precision, roundingMode); 
    return rounded.doubleValue(); 
} 

Sen

round(yourNumber, 3, BigDecimal.ROUND_HALF_UP); 

"hassas" Arzu ondalık noktaların sayısı olmak diyebiliriz.

+0

Yanıtlamak için zaman ayırdığınız için teşekkürler bluedevil. Önerinizi denedim ve 'BigDecimal bir türe çözülemiyor' diyerek hatalar alıyorum. Korkarım bunun için yeni ve aptallar rehberine ihtiyacım var! – Alan

+8

import java.math.BigDecimal – bluedevil2k

+0

parlak, teşekkürler: =) – cV2

0

Dene:

float number mkm = (((((amountdrug/fluidvol)*1000f)/60f)*infrate)/ptwt)*1000f; 
int newNum = (int) mkm; 
mkm = newNum/1000f; // Will return 3 decimal places 
+0

Merhaba travega, ben bu konuda bana yardımcı olmak için zaman ayırdığınız için size kısaca. Sağladığınız kodu kopyalayıp yapıştırdım, ancak hatayı alıyorum - 'sözdizimi hatası, ekle ";" LocalVariableDeclarationStatement 'işlemini tamamlamak için. Üçünü kontrol ettim; Yukarıdaki kodda yer almaktadır. – Alan

11

Sadece Math.Round() kullanın

double mkm = ((((amountdrug/fluidvol)*1000f)/60f)*infrate)/ptwt; 

mkm= (double)(Math.round(mkm*100))/100; 
+0

math.round, soru başına 2 ondalık basamak elde ettiğiniz için burada çalışmaz – Adsy2010

8
double formattedNumber = Double.parseDouble(new DecimalFormat("#.##").format(unformattedNumber)); 

benim için çalıştı :)

1

BigDecimal a = new BigDecimal("12345.0789");
a = a.divide(new BigDecimal("1"), 2, BigDecimal.ROUND_HALF_UP);
//Also check other rounding modes
System.out.println("a >> "+a.toPlainString()); //Returns 12345.08

-2

Yuvarlak adında bir sınıf oluşturun ve buluşmayı kullanmayı deneyin Kodunuzdaki

public class Round { 

     public static float round(float targetValue, int roundToDecimalPlaces){ 

      int valueInTwoDecimalPlaces = (int) (targetValue * Math.pow(10, roundToDecimalPlaces)); 

      return (float) (valueInTwoDecimalPlaces/Math.pow(10, roundToDecimalPlaces)); 
     } 

    } 
İlgili konular