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

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

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

有帮助吗?

解决方案

通过该球员的方式,(int)的Decimal.MaxValue会溢出。因为小数过于friggen大放于INT盒你不能得到一个小数点“INT”的一部分。刚才检查...它甚至太大了很长(Int64的)。

如果你想有一个十进制值点左边的一点,你需要做的:

Math.Truncate(number)

和返回值作为...小数或DOUBLE。

编辑:截断绝对是正确的函数

其他提示

我觉得 System.Math.Truncate 是你在做什么寻找。

取决于你在做什么。

例如:

//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.

您只需要投它,因为这样的:

int intPart = (int)343564564.4342

如果您仍希望使用它作为在稍后的计算小数,然后Math.Truncate(或可能Math.Floor如果想负数的某些行为)是你想要的功能。

非常简单的方法来单独值和其小数部分的值。

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

s是小数部分= 5和点击 i是值作为整数= 3

我希望帮助你。

/// <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));
}
   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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top