99

返回小数的整数部分(在c#中)的最佳方法是什么?(这必须适用于可能不适合 int 的非常大的数字)。

GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324

这样做的目的是:我正在插入数据库中的十进制 (30,4) 字段,并希望确保我不会尝试插入一个对于该字段来说太长的数字。确定小数的整数部分的长度是此操作的一部分。

4

7 回答 7

228

顺便说一句, (int)Decimal.MaxValue 会溢出。您无法获得小数的“int”部分,因为小数太大而无法放入 int 框中。刚刚检查过......它甚至太大了(Int64)。

如果您希望 Decimal 值的位位于点的左侧,则需要执行以下操作:

Math.Truncate(number)

并将值返回为... DECIMAL 或 DOUBLE。

编辑:截断绝对是正确的功能!

于 2009-01-26T13:03:16.263 回答
26

我认为System.Math.Truncate是您正在寻找的。

于 2009-01-26T13:32:05.880 回答
4

取决于你在做什么。

例如:

//bankers' rounding - midpoint goes to nearest even
GetIntPart(2.5) >> 2
GetIntPart(5.5) >> 6
GetIntPart(-6.5) >> -6

或者

//arithmetic rounding - midpoint goes away from zero
GetIntPart(2.5) >> 3
GetIntPart(5.5) >> 6
GetIntPart(-6.5) >> -7

默认值始终是前者,这可能会让人感到意外,但也很有意义

您的明确演员将做:

int intPart = (int)343564564.5
// intPart will be 343564564

int intPart = (int)343564565.5
// intPart will be 343564566

从你提出问题的方式来看,这听起来不是你想要的——你每次都想把它说出来。

我会做:

Math.Floor(Math.Abs(number));

还要检查你的尺寸decimal- 它们可能很大,所以你可能需要使用long.

于 2009-01-26T13:26:10.960 回答
1

你只需要转换它,如下所示:

int intPart = (int)343564564.4342

如果您仍想在以后的计算中将其用作小数,那么 Math.Truncate (或者如果您想要负数的某种行为,则可能是 Math.Floor)是您想要的函数。

于 2009-01-26T13:03:21.833 回答
0

分离值及其小数部分值的非常简单的方法。

double  d = 3.5;
int i = (int)d;
string s = d.ToString();
s = s.Replace(i + ".", "");

s 是小数部分 = 5,
i 是整数值 = 3

于 2015-10-17T12:37:07.427 回答
0

我希望能帮助你。

/// <summary>
/// Get the integer part of any decimal number passed trough a string 
/// </summary>
/// <param name="decimalNumber">String passed</param>
/// <returns>teh integer part , 0 in case of error</returns>
private int GetIntPart(String decimalNumber)
{
    if(!Decimal.TryParse(decimalNumber, NumberStyles.Any , new CultureInfo("en-US"), out decimal dn))
    {
        MessageBox.Show("String " + decimalNumber + " is not in corret format", "GetIntPart", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return default(int);
    } 

    return Convert.ToInt32(Decimal.Truncate(dn));
}
于 2019-06-24T07:44:40.007 回答
-1
   Public Function getWholeNumber(number As Decimal) As Integer
    Dim round = Math.Round(number, 0)
    If round > number Then
        Return round - 1
    Else
        Return round
    End If
End Function
于 2017-05-09T14:49:48.537 回答