2013-05-07 44 views
4

我想手動舍入圓形() - 方法。 所以我可以告訴我的程序,這是我的號碼,在這一點上,我希望你圓。 讓我給你一些例子:
輸入號碼:144
輸入取整:2
輸出四捨五入數:140
如何手動舍入?

輸入編號:123456
輸入四捨五入:3
輸出四捨五入編號:123500

作爲一個litte插件可能在逗號後面回合: 輸入號碼:123.456
輸入舍入:-1
輸出四捨五入號:123.460

我不知道如何開始編程是... 有沒有人線索我如何開始與這個問題?

謝謝你幫助我:)

我想更好地學習編程,所以我不希望使用圓,讓我自己一個人,所以我可以理解一個更好的辦法:)

+3

你想圓什麼類型的號碼的? (如果你想圓浮點數沒有任何內置的工具......不知道。只是不要。) – 2013-05-07 18:47:04

+1

這是功課? – Shaded 2013-05-07 18:47:20

+3

他在帖子中說他想要這樣做,以便他了解四捨五入的工作原理。理解程序的基本功能是很好的事情。 – Renan 2013-05-07 18:57:39

回答

1

一個簡單的方法來做到這一點是:

  1. 除以以十
  2. 回合它的功率數任何所需的方法
  3. 將結果乘以十步驟相同功率1

讓我告訴你一個EXA mple:

您想將數字1234.567四捨五入爲兩位小數(期望的結果爲1234.57)。

x = 1234.567; 
p = 2; 
x = x * pow(10, p); // x = 123456.7 
x = floor(x + 0.5); // x = floor(123456.7 + 0.5) = floor(123457.2) = 123457 
x = x/pow(10,p); // x = 1234.57 
return x; 

當然,您可以將所有這些步驟合併爲一個。我一步一步向你展示它是如何工作的。在一個緊湊的Java的形式,它會是這樣的:

public double roundItTheHardWay(double x, int p) { 
    return ((double) Math.floor(x * pow(10,p) + 0.5))/pow(10,p); 
} 

對於整數位置,你可以很容易地檢查這也可以(與p < 0)。

希望這有助於

+0

你的'roundItTheHardWay'方法中'int p'參數的目的是什麼?看起來你從不使用它。你打算用'pow(10,p)'還是'pow(10,-p)'替換'pow(10,2)'? – andand 2013-05-07 19:45:50

+0

樓層究竟是什麼?我在Google上發現了一些可以返回整數的內容?那是對的嗎?或者是...哦!我明白了......好的:D明白了!謝謝 – MikroByte 2013-05-07 19:51:24

+0

@MikroByte'floor(x)= n'其中'n'是小於或等於'x'的最大整數。檢查:http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#floor(double) – Barranka 2013-05-07 20:24:32

1

,如果你需要一些建議如何啓動,

  • 步步寫下來,你需要做的144,2得到什麼算盤 - > 140
  • 替換用java命令你的數學,這應該很容易,但如果你有問題,理由噸的 「輸入舍入」 倍看herehere
0

鴻溝(正)/乘法(負)10 - 1(144 /(10 *(2 - 1))。在這個例子中,這會給你同樣的結果。獲取最後一位數字的剩餘部分(4)。確定它是否大於或等於5(小於)。根據以前的答案,使其等於0或加10。乘以/將輸入舍入乘以10 - 1。這應該給你你的價值。

如果這是作業。目的是教你自己思考。我可能會給你答案,但你仍然需要自己編寫代碼。

下一次,你應該寫自己的代碼,並詢問什麼是錯的

+0

謝謝你,這不是作業;)就像我寫的,我想知道它是如何工作:) – MikroByte 2013-05-07 19:44:08

1
public static int round (int input, int places) { 
    int factor = (int)java.lang.Math.pow(10, places); 
    return (input/factor) * factor; 
} 

基本上,這樣做是把輸入你的因素,然後再乘以。在用Java等語言劃分整數時,其餘部分從結果中刪除。

編輯:代碼是錯誤的,固定它。此外,java.lang.Math.pow是讓你得到10的n次方,其中n是places值。在OP的例子中,要考慮的地方數量增加了一個。

重新編輯:在評論中指出,上述將給你,也就是說,四捨五入的結果。如果你不想總是本輪下跌,你也必須保持另一個變量。就像這樣:

int mod = input % factor; 

如果你想永遠得到天花板,就是四捨五入,檢查mod是否爲零。如果是這樣,那就留下吧。否則,將factor添加到結果中。

int ceil = input + (mod == 0 ? 0 : factor); 

如果要舍入到最近的,然後拿到地板如果mod小於factor/2或者天花板上,否則。

+0

偉大的工程,但我有一個litte調整要做,因爲它不看以下內容:1234567是roundet到1234500,但它必須是1234600。;)感謝該代碼片段 – MikroByte 2013-05-07 19:46:13

+1

這不會給你「地板」而不是「輪」的輸入? – jfrank 2013-05-07 19:46:15

+0

@jfrank是對的。這是* floor *。如果你想* * ceiling *,即舍入** up **而不是四捨五入** down,那麼還要檢查(input%factor)== 0是否爲0.如果是這樣,則保留它,否則,爲結果添加因子。 – Renan 2013-05-07 20:25:44

0

對於整數,一個方法是使用mod運算符,它是百分號%,和除法運算的組合。在你的第一個例子中,你將計算144%10,結果爲4.並計算144/10,它給出14(作爲整數)。您可以在MOD操作的結果比較一半的分母,以找出是否應該四捨五入的14高達15或沒有(在這種情況下沒有),然後由分母乘回得到答案。

在僞代碼,假設n爲圓數,p是10代表的顯著位的位置電源:

denom = power(10, p) 
remainder = n % denom 
dividend = n/denom 
if (remainder < denom/2) 
    return dividend * denom 
else 
    return (dividend + 1) * denom