أفضل طريقة للحصول على رقم جزء كامل من عدد عشري

StackOverflow https://stackoverflow.com/questions/479706

  •  20-08-2019
  •  | 
  •  

سؤال

ما هو أفضل وسيلة لإرجاع عدد جزء كامل من عشري (في ج #)؟ (وهذا له للعمل لأعداد كبيرة جدا التي قد لا تنسجم مع عدد صحيح).

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

والغرض من هذا هو: أنا إدخالها في عشري (30،4) في ميدان ديسيبل، وتريد التأكد من أنني لا محاولة إدراج عدد من طويل جدا للحقل. تحديد طول رقم جزء كامل من عشري هو جزء من هذه العملية.

هل كانت مفيدة؟

المحلول

وبالمناسبة الرجال، (الباحث) Decimal.MaxValue سيتم تجاوز. لا يمكنك الحصول على جزء "الباحث" من عشري لأن عشري هو friggen جدا كبير وضعه في مربع كثافة العمليات. فقط التحقق ... لها حتى كبيرة جدا لفترة طويلة (Int64).

إذا كنت تريد شيئا من القيمة العشرية إلى يسار النقطة، تحتاج إلى القيام بذلك:

Math.Truncate(number)

ووالعودة القيمة ك ... عشري أو مزدوجة.

تحرير: اقتطاع هو بالتأكيد وظيفة الصحيحة

نصائح أخرى

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

والافتراضي هو دائما في السابق، والتي يمكن أن تكون مفاجأة ولكن <لأ href = "http://bizvprog.blogspot.com/2008/01/computers-didnt-learn-rounding-at.html" يختلط = " نوفولو noreferrer "> يجعل جيد جدا الشعور .

ويلقي صريحة ستفعل:

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 + ".", "");

والصورة هي جزء كسري = 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