可能重複:
Round a double to 2 significant figures after decimal point如何改變的雙重價值四個小數點值
我有lat和長點這樣,
x1: 11.955165229802363
y1: 79.8232913017273
我需要轉換4位小數點
x1 = 11.9552
y1 = 79.8233
可能重複:
Round a double to 2 significant figures after decimal point如何改變的雙重價值四個小數點值
我有lat和長點這樣,
x1: 11.955165229802363
y1: 79.8232913017273
我需要轉換4位小數點
x1 = 11.9552
y1 = 79.8233
嘗試
double roundTwoDecimals(double d)
{
DecimalFormat twoDForm = new DecimalFormat("#.####");
return Double.valueOf(twoDForm.format(d));
}
這是什麼輪模式? – 2012-08-03 12:04:52
而不是兩個數學運算創建兩個新對象,並調用3個方法只顯示點後4位數字,這麼多的開銷 – marwinXXII 2012-08-03 19:23:39
DecimalFormat dtime = new DecimalFormat("#.####");
^^^^
x1= Double.valueOf(dtime.format(x1));
我想你可能在這裏忘記了一條線; dtime不使用。 – 2012-08-03 11:58:38
Opps ..!謝謝@JimKiley – MAC 2012-08-03 12:00:14
嘗試此
String.format("%.4f", 11.955165229802363)
Math.ceil(x1* 10000)/10000
替換10000 10^N,其中N是點後位數。點後4位數的情況下,精度不應該丟失。
假設你想圓/截斷小數和速度不是一個很大的代價,你想用BigDecimal(BigInteger unscaledVal, int scale)
與scale
設置爲4
float round = Round(num,4);
System.out.println("Rounded data: " + round);
}
public float Round(float Rval, int Rpl) {
float p = (float)Math.pow(10,Rpl);
Rval = Rval * p;
float tmp = Math.round(Rval);
return (float)tmp/p;
}
double d1 = Double.valueOf(x1);
double d2 = Double.valueOf(x1);
DecimalFormat df = new DecimalFormat("#.####");
System.out.print("x1 = "+df.format(d1));
System.out.print("x2 = "+df.format(d2));
如果你只想要顯示的像這樣的值,使用DecimalFormat將該值轉換爲字符串,然後顯示該值。
如果你真的想四捨五入到四位數,你可以通過乘以10000,四捨五入,然後再分。不過,我會建議,因爲並非所有的十進制數都可以用浮點格式正確表示。變化是你會得到像你已經有的東西。
如果您確實需要四位數字作爲內部狀態使用,請改用BigDecimal。它有適當的裝備去做你想做的事。
這是爲了顯示目的還是要截斷數字的值? – Sam 2012-08-03 11:56:15