en C #, j'essaie d'obtenir les deux derniers endroits décimaux d'un double sans arrondissement. J'ai tout essayé de échantillons des résultats que je voudrais: p> math.floor code> à
math.trunate code> et rien ne fonctionne.
1,424.2488298 -> 1,424.24
53.5821 -> 53.58
10,209.2991 -> 10,209.29
5 Réponses :
Bien, mathématiquement, c'est simple:
double Truncate(double value, int places) { // not sure if you care to handle negative numbers... var f = Math.Pow( 10, places ); return Math.Truncate( value * f ) / f; }
Pas si simple. Les doubles contiennent une plus grande gamme que l'INTS.
@joe: Ahh bon point, utilisez Math.trunate à la place, aucun casting requis
@Eds. J'ai essayé ceci sur la valeur 136.2025 à l'aide de votre première méthode et il la coupe à 136,2 et laissé tomber le 0. Y a-t-il un moyen de garder le 0 dedans?
@Mint: Eh bien, maintenant, vous parlez d'affichage, pas le nombre lui-même. Il n'y a pas de différence entre 136.2 code>,
136.20 code> et
136.2000000 code>. Si vous souhaitez imprimer avec un certain nombre d'endroits affichés, examinez la mise en forme de chaîne dans des appels vers
string.format code>.
@Mint: Veillez également à noter ce que l'Eric Lippert a dit dans son poste. Vous feriez peut-être mieux d'utiliser le type décimal code> et la multiplication échouera si cela entraînerait un nombre supérieur à la valeur max pour un
double code>.
double d = Math.Truncate(d * 100) / 100;
Une solution générale: puis p> produise le résultat souhaité x = 5.34 code>. p> p>
Mon conseil: Arrêtez d'utiliser Si vous avez un double, vous pouvez le faire comme ceci: p> Notez que cette technique échouera si la valeur absolue du double est plus gros que 792281625142643375935439504, car la multiplication par 100 échouera. Si vous avez besoin de gérer des valeurs qui grandes, vous devrez utiliser des techniques spéciales. (Bien sûr, au moment où un double est-ce grand, vous au-delà de sa capacité à représenter des valeurs à deux chiffres après la décimale de toute façon.) P> p> Double code> en premier lieu strong>. Si vous avez besoin d'arrondi décimal, les chances sont bonnes, vous devez utiliser
décimal code>. Quelle est votre application?
Math.Round(53.5821 - (double)0.005,2) // 53.58 Math.Round(53.5899 - (double)0.005,2) // 53.58 Math.Round(53.5800 - (double)0.005,2) // 53.58
Si vous travaillez dans décimal i> alors pourquoi utilisez-vous double i> lorsque vous pouviez utiliser décimal i>?
Vous pouvez aller à ce message et trouver ce qu'il convient à vous Comment-code-net.blogspot.ro/2012/09/...