2014-10-03 35 views
0

我的項目中有一項功能可以對3個不同的小數進行乘法運算。通過在java中舍入來減少數字長度

有時候,結果可能給一些真正的大號碼,如:

213215648783612154.334 
or 
421342342342342344.123 

的事情是:這使該值的記錄列就像NUMBER(8,3)定義。有沒有辦法通過做一些舍入操作來減少這個數字的長度?我真的不想重新定義列,因爲它正在系統的其他部分使用。

+0

關於什麼的只取較小的最大您的隨機函數? – 2014-10-03 14:33:48

+0

當您創建答案BigDecimal時,您可以給它一個舍入比例。 – StackFlowed 2014-10-03 14:34:35

+0

我知道我可以給一個舍入的比例,但我可以給它,所以我的號碼的長度減少?從(14,3)到(8,3)? – 2014-10-03 14:35:38

回答

3

您的系統中存在基本設計或邏輯缺陷。

如果你有一個數據庫,預期值爲NUMBER(8,3),那麼它說:「我有8位數的空間,其中3個是小數」。可以存儲在該列中的最大值是99999.999

您不能存儲任何更大的值。期。

那麼,這是什麼問題?或者:

  1. 程序邏輯是錯誤的,它是計算像213215648783612154.334的值只是普通的壞....或
  2. 您的數據庫實現設計很糟糕,因爲它應該是能夠存儲較大的值比計劃。

你修復哪一個取決於你的具體情況。

0

答案是:不可能以某種有意義的方式四捨五入。因爲最大值爲99999.999

您可以嘗試編碼而不是四捨五入。但所有其他與此列一起工作的代碼必須瞭解編碼。 例如,您可以使用前5位數作爲尾數,最後3位作爲指數(並在某處隱藏標誌)。但是如果你嘗試一下,我想看看你的同事們的臉。

0

嗯確定你可以切斷一些數字,即使它可能會給你一些錯誤的數據呵呵。

String number= Mynumber.tostring(); //assuming mynumber is the object that stores the number 
number= number.substring((number.length()-(number.length()-9)) , number.length()); //adding 1 to 8 because of the '.' 
System.out.pritnln(number); 

輸入=

213215648783612154.334 

輸出:

12154.334