2013-03-07 70 views
0

這更多的是一個謎題/邏輯類型的問題,而不是一個編程問題 - 但我希望有人可以幫助,因爲我很難過。雙精度到四捨五入邏輯問題

我從一個整數開始,需要佔X%。一旦我得到這個雙數,我需要把它回到一個整數(稱爲Y)。它實際上並不重要,如果我圍繞它,我並不在乎它向哪裏(向上或向下),所以使用地板/天花板將是一個可接受的解決方案 - 我只需要一個int。

在後面的系統中,我將介紹int Y,並且需要知道原始數字是什麼。在這一點上,如果我知道百分比是多少,並且我知道我用什麼方法將double加到int中 - 我如何確定原始數字。

這需要適用於每個原始數量/百分比組合。

例子:

Original number: 997 
Percentage: 90 
Int-Conversion Method: Floor 

997 * .90 = 897.3 
floor(897.3) = 897 
Y = 897 

.. .. 鑑於897,知道的百分比和INT-轉換方法,我怎麼能確定原來的號碼是997?

+0

'897/.90 = 996.667'不是原始數字997不是1000?顯然,自圓整'Y'後,它不會100%準確。 – Danny 2013-03-07 17:02:40

+0

是的,997對不起,我編輯了原來的問題。這是問題/問題,有沒有一種方法可以使它100%準確? – ljump12 2013-03-07 17:05:14

回答

2
997 * .90 = 897.3 
floor(897.3) = 897 
Y = 897 

鑑於您建議的方法,我將解釋爲什麼在您提供的方法和數據給定的情況下無法返回到確切數字。

計算百分比是好的,你剩下double值。然後,您可以使用floor函數有效截斷部分數據。截斷不是bijection,所以你不能從897 - > 897.3回去,因此不可能以任何確定的程度重現原始數字。考慮到你提供的數據的規模,你不會錯得很遠,但對於更大的值,或者對於需要更高精度的情況,你可能會發現這種方法非常像猜測工作。

+0

只是爲了確認,因爲我認爲你的意思和我的理解。沒有辦法做到這一點(使用任何截斷功能/圓/地板/天花板/自定義)。 – ljump12 2013-03-07 17:07:50

+0

是的。而對於你所掌握的數據,我並不瞭解如何讓它100%準確。根據我的回答確實回答你的問題,請將其標記爲正確:) – christopher 2013-03-07 17:11:14

0

你會用公式

original number = calculated number/percentage 

使用你的號碼

997 = 897/0.90 

在原來的計算和反向計算,則需要四捨五入的答案。

如果你不這樣做,那麼當你進行反向計算時,你會更經常關閉它。

+0

我試過這個,總是有邊緣情況下不起作用。 – ljump12 2013-03-07 17:14:08

+0

修正了我的答案。如果你想能夠扭轉這個過程,你必須在某個地方保存這個double。 – 2013-03-07 17:17:20