我不知道正确的术语来解释这个,我有一个小数位从api回来看起来像:
我不需要小数点后的任何数据,在上面的示例中它只是我需要的22值,我可以用正则表达式但它似乎有点凌乱,任何帮助将不胜感激!
答案 0 :(得分:4)
标题建议四舍五入,但你正在描述四舍五入。这里有一些选择:
如果它是一个字符串,你只想要22(向下舍入,而不是向上),那么使用IndexOf是最快的。这也是预期的负面因素:
string theNumber = "22.7685857856";
int pointLocation = theNumber.IndexOf('.');
int theRoundedDownNumber = int.Parse(theNumber.Substring(0,pointLocation)); // 22
如果它不是一个字符串 - 即你有一个double
,float
或Decimal
,那么这些更好(我假设你实际上在这里使用的是double比“十进制”数据类型;但无论如何,函数都是相同的):
围绕向上(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)
然而,如果你的数字可以包含负数,那么事情就会变得有点有趣,因为Floor和Ceiling会为负数“走错路”。对于向下舍入(Floor),将其转换为整数是一种简单的方法:
double yourNumber = 22.7685857856;
// -22.4 -> -22 and 22.4 -> 22
int yourNumberInt = (int)yourNumber;
对于四舍五入,最安全的路线是if:
if( yourNumber > 0 )
{
// 22.7 -> 23
yourNumber = Math.Ceiling(yourNumber);
}
else
{
// -22.4 -> -23
yourNumber = Math.Floor(yourNumber);
}
答案 1 :(得分:0)
最简单的方式使用演员?
int x = (int) 22.7685857856;
或者,如果您只想删除小数位:
decimal y = Decimal.Floor(22.7685857856m);
或者,如果您想要舍入正确并返回string
:
string result = 22.7685857856m.ToString("N0");
答案 2 :(得分: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。