我不知道正確的術語來解釋這一點,我有個十進制數字從一個API,它看起來像回來:四捨五入長小數點
我不在小數點後面不需要任何數據,在上面的例子中它只是我需要的值,我可以用正則表達式來處理它,但它看起來有點混亂,任何幫助將不勝感激!
我不知道正確的術語來解釋這一點,我有個十進制數字從一個API,它看起來像回來:四捨五入長小數點
我不在小數點後面不需要任何數據,在上面的例子中它只是我需要的值,我可以用正則表達式來處理它,但它看起來有點混亂,任何幫助將不勝感激!
標題建議四捨五入,但你說的是四捨五入。這裏有一些選項:
如果它是一個字符串,你只想要22(舍入,不上),那麼使用IndexOf是最快的。這個工程預期與底片太:
string theNumber = "22.7685857856";
int pointLocation = theNumber.IndexOf('.');
int theRoundedDownNumber = int.Parse(theNumber.Substring(0,pointLocation)); // 22
如果它不是一個字符串 - 即你已經有了一個double
,float
或Decimal
,那麼這些都是更好的(我假設你實際上採用雙,而在這裏比 '小數' 數據類型;功能是相同的或者然而方式):
爲了完善向上(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);
}
最簡單的方法使用鑄造?
int x = (int) 22.7685857856;
或者,如果你只是想去掉小數位:
decimal y = Decimal.Floor(22.7685857856m);
或者,如果你想圓正確並返回string
:
string result = 22.7685857856m.ToString("N0");
有幾種方法來做這個。一種方法是使用`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。
你想四捨五入嗎,還是你想要整數截斷?對於整數截斷 - 請參閱下面的凱文的答案。 – EtherDragon
您提到了十進制數字,但未提及該值是字符串還是小數。你看到https://msdn.microsoft.com/en-us/library/bb397679.aspx – randominstanceOfLivingThing
@EtherDragon對我來說,它看起來像整數截斷,因爲給出的例子 –