.net 获取十进制数的整数部分的最佳方法

vhmi4jdf  于 2023-02-26  发布在  .NET
关注(0)|答案(8)|浏览(145)

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

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

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

yvgpqqbh

yvgpqqbh1#

顺便说一句,(int)Decimal。MaxValue会溢出。你不能得到小数的“int”部分,因为小数太大了,不能放在int框中。刚刚检查了一下. a....它甚至对long(Int 64)来说太大了。
如果希望Decimal值的位位于点的左侧,则需要执行以下操作:

Math.Truncate(number)

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

  • edit:截断绝对是正确的函数!*
syqv5f0l

syqv5f0l3#

那要看你在做什么了。
例如:

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

默认值始终是前者,这可能会令人惊讶,但makes very good sense
您的显式强制类型转换将执行以下操作:

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

63lcw9qa

63lcw9qa4#

您只需要将其转换为如下类型:

int intPart = (int)343564564.4342

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

pftdvrlh

pftdvrlh5#

希望能帮到你。

/// <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));
}
anauzrmj

anauzrmj6#

非常简单的方法来分离价值和它的小数部分价值。

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

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

slhcrj9b

slhcrj9b7#

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
ubof19bj

ubof19bj8#

忘了这个词的意思:"整数"在答案和问题中似乎很常见。
从数字得到整数:4很简单:
四舍五入一个数字,以获得一个整数是一个作弊的方法获得整数!四舍五入删除非整数部分的数字!

1.3 x 4 = 5.2 <- NOT a Whole Number!
1 x 343564564.4342 <- NOT a Whole Number!

了解整数是什么很重要!

4 / 1 = 4 <- A Whole Number!
4 / 2 = 2 <- A Whole Number!
4 / 3 = 1.333 recurring  <- NOT A Whole Number!

请问,并回答问题,多一点准确窥视...

double A = Math.Abs(343564564.4342);
double B = Math.Floor(343564564.4342);
double C = Math.Ceiling(343564564.4342);
double D = Math.Truncate(343564564.4342);

退货:

A = 343564564.4342
B = 343564564
C = 343564565
D = 343564564

或:

double E = Math.Round(343564564.4342, 0);
E = 343564564

是一个数学函数,因此改变了数字,而不是整数。您的舍入非整数!

相关问题