2016-11-15 155 views
0

我不知道正確的術語來解釋這一點,我有個十進制數字從一個API,它看起來像回來:四捨五入長小數點

sample cicture (例如:22.778654357658)

我不在小數點後面不需要任何數據,在上面的例子中它只是我需要的值,我可以用正則表達式來處理它,但它看起來有點混亂,任何幫助將不勝感激!

+0

你想四捨五入嗎,還是你想要整數截斷?對於整數截斷 - 請參閱下面的凱文的答案。 – EtherDragon

+1

您提到了十進制數字,但未提及該值是字符串還是小數。你看到https://msdn.microsoft.com/en-us/library/bb397679.aspx – randominstanceOfLivingThing

+0

@EtherDragon對我來說,它看起來像整數截斷,因爲給出的例子 –

回答

4

標題建議四捨五入,但你說的是四捨五入。這裏有一些選項:

如果它是一個字符串,你只想要22(舍入,不上),那麼使用IndexOf是最快的。這個工程預期與底片太:

string theNumber = "22.7685857856"; 

int pointLocation = theNumber.IndexOf('.'); 

int theRoundedDownNumber = int.Parse(theNumber.Substring(0,pointLocation)); // 22 

如果它不是一個字符串 - 即你已經有了一個doublefloatDecimal,那麼這些都是更好的(我假設你實際上採用雙,而在這裏比 '小數' 數據類型;功能是相同的或者然而方式):

爲了完善向上(22.77 - > 23):

double yourNumber = 22.7685857856; 

yourNumber = Math.Ceiling(yourNumber); 

爲了完善向下(22.77 - > 22):

double yourNumber = 22.7685857856; 

yourNumber = Math.Floor(yourNumber); 

要剛輪它(22.77 - > 23; 22.4 - > 22):

double yourNumber = 22.7685857856; 

yourNumber = Math.Round(yourNumber); 

如果你的號碼是一個字符串(「22。7685857856" ),但你想使用這些功能,那麼你就需要先分析它:

double yourNumber = double.Parse("22.7685857856"); 

(或者double.TryParse)

然而,如果你的號可以包含底片,然後事情變得有趣,因爲地板和天花板會「走錯路」爲負數向下舍入(樓),其鑄造成整數的是,圍繞着一個簡單的方法:

double yourNumber = 22.7685857856; 

// -22.4 -> -22 and 22.4 -> 22 
int yourNumberInt = (int)yourNumber; 

四捨五入最安全的路線是a n如果:

if(yourNumber > 0) 
{ 
    // 22.7 -> 23 
    yourNumber = Math.Ceiling(yourNumber); 
} 
else 
{ 
    // -22.4 -> -23 
    yourNumber = Math.Floor(yourNumber); 
} 
0

最簡單的方法使用鑄造?

int x = (int) 22.7685857856; 

或者,如果你只是想去掉小數位:

decimal y = Decimal.Floor(22.7685857856m); 

或者,如果你想圓正確並返回string

string result = 22.7685857856m.ToString("N0"); 
0

有幾種方法來做這個。一種方法是使用`string.split('。')[0])來獲取小數點左邊的字符串部分,然後將其轉換爲整數。

string s = "22.77"; 
int x = Convert.ToInt32(s.Split('.')[0]); 

另一種方法是使用Math.Floor,但這樣做有點混亂,因爲它返回一個類型decimal,你可能想再次轉換爲int

string s = "22.77"; 
int x = Convert.ToInt32(Math.Floor(Convert.ToDecimal(s))); 

編輯:其實,你可能想避開第二種方法,因爲Math.Floor始終幾輪下來,而不是小數點後剛剛丟棄的數字。這意味着22.77下降到22.0,但-22.77下降到-23.0。