2016-06-23 48 views
2

想象我有一個長時間,是一個表示價格:Java,如何以一種模仿四捨五入的方式截斷長數字?

548880 

也許這就像指定一個54.8880價格。長表格用於通過電線傳輸數據。

我想簡單地將價格調整到給定的精度。

例如,54.8880 --> 54.89,因此我最終成爲長548900.

是否有可能直接長在這種方式圓了,否則我就早已把重鑄BigDecimal,圓形,然後回長?

+0

怎麼了領先的0? –

+0

有['NumberFormat'](https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html)和['DecimalFormat'](https://docs.oracle。 com/javase/8/docs/api/java/text/DecimalFormat.html)可以幫助您使用此格式。 –

+0

我們的價格我們的8位數字,所以前導0是佔位符,因爲我們可以發送像0005這樣的數字,意味着5,005到平均值50,05到平均值500和5到平均值5000 –

回答

2
long n = 33333; // your number 
int digit = n%10; // will return 3 
if(digit < 5) 
    n -= digit; // 33330 
else {n-= digit; n += 10;} // 33340 

更改10以​​匹配您的精度。

+0

謝謝,這更符合我的想法。讓我測試它真的很快 –

+0

這是沿着我想要的線,但如果我改變我的精度從10到100,它不返回33400,它返回33310. –

+0

你必須在最後更改10線。由於四捨五入的效果,33333總是會返回33330。 33340只是一個例子。 – Shiro

1

的有點棘手單行舍入到100的倍數是:

(n + 50)/100 * 100 

適應的常數輪其他精度。

+0

我在原來的問題中沒有提到這一點,但我實際上需要總是朝着負無窮的方向發展。這非常聰明,但它是否適合這樣的四捨五入? –

+1

對於正數,這更簡單:n/100 * 100 – Henry