95 votes

Meilleur moyen d'obtenir la partie entière d'un nombre décimal

Quelle est la meilleure façon de renvoyer la partie entière d'un nombre décimal (en c#) ? (Cela doit fonctionner pour de très grands nombres qui peuvent ne pas tenir dans un int).

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

Le but de ceci est : J'insère un champ décimal (30,4) dans la base de données et je veux m'assurer que je n'essaie pas d'insérer un nombre trop long pour le champ. La détermination de la longueur de la partie entière du nombre décimal fait partie de cette opération.

0 votes

Vous ne pouvez pas obtenir la partie int ; vous pouvez obtenir la partie nombre entier et laisser tomber la partie fractionnaire. La partie entière d'un Decimal peut facilement déborder d'un int et soit jeter ou envelopper, tuant silencieusement votre code.

1 votes

C'est pourquoi cette question n'est pas aussi simple qu'elle le semble. J'ai besoin que cela fonctionne pour les très grands nombres de manière aussi fiable que pour les petits nombres. Cependant, "nombre entier" est plus précis que "int" - je vais reformuler la question ci-dessus.

0voto

luka Points 390

J'espère vous aider.

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

-1voto

Mattheu Norwood Points 40
   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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X