舍入长小数点

时间:2016-11-15 20:26:21

标签: c#

我不知道正确的术语来解释这个,我有一个小数位从api回来看起来像:

sample cicture (例如:22.778654357658)

我不需要小数点后的任何数据,在上面的示例中它只是我需要的22值,我可以用正则表达式但它似乎有点凌乱,任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:4)

标题建议四舍五入,但你正在描述四舍五入。这里有一些选择:

如果它是一个字符串,你只想要22(向下舍入,而不是向上),那么使用IndexOf是最快的。这也是预期的负面因素:

string theNumber = "22.7685857856";

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

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

如果它不是一个字符串 - 即你有一个doublefloatDecimal,那么这些更好(我假设你实际上在这里使用的是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。