comment faire pour arrondir la valeur à seulement 3 points décimaux?
je suis en train de travailler sur un logiciel d'inventaire, et a été le calcul de la réduction en pourcentage et en montant.
- signifie quand je rentre % montant de convertir automatiquement à prix#
- et quand je rentre de prix, il convertit automatiquement à l' % #
le code j'utilise pour convertir les prix en % est-ce:
if(txtDiscount.Text == "" || txtGrandTotal.Text == "")
{
MessageBox.Show("Please Enter amount in Grand Total",Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
// double percent;
double grandTotal;
double per;
double txDiscount;
//percent = Convert.ToInt32(txtPercant.Text);
grandTotal = Convert.ToInt32(txtGrandTotal.Text);
txDiscount = Convert.ToInt32(txtDiscount.Text);
per = txDiscount / grandTotal * 100;
//per = percent /100 * grandTotal;
if (per % 3 != 0)
per = (per - per % 3) + 3;
txtPercant.Text = Convert.ToString(per);
................
................
................
................
................
maintenant, supposons que si je suis saisi le montant est "25", puis le pourcentage de comte est "2.77777777777778". je veux limiter à trois décimales après le point, comme je veux être "2.778" ou quelque moyen que ce soit, je veux montrer que 3 décimales après le point, quelqu'un peut-il m'aider dans la voie que je peut faire ?? toutes les suggestions seraient appréciées!!
EDIT:
Coversion Prix % Code est:
private void txtDiscount_Leave(object sender, EventArgs e)
{
if(txtDiscount.Text == "" || txtGrandTotal.Text == "")
{
MessageBox.Show("Please Enter amount in Grand Total",Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
// double percent;
double grandTotal;
double per;
double txDiscount;
//percent = Convert.ToInt32(txtPercant.Text);
grandTotal = Convert.ToInt32(txtGrandTotal.Text);
txDiscount = Convert.ToInt32(txtDiscount.Text);
per = txDiscount / grandTotal * 100;
//per = Math.Round(per, 3);
per = Math.Truncate(per * 1000) / 1000;
txtPercant.Text = Convert.ToString(per);
double lblgrandTotal = 0.0;
double Disconunt = 0.0;
double netTotal = 0.0;
lblgrandTotal = Convert.ToDouble(txtGrandTotal.Text);
Disconunt = Convert.ToDouble(txtDiscount.Text);
netTotal = grandTotal - Disconunt;
//netTotal = Convert.ToInt32(grandTotal) - Convert.ToInt32(Discount);
lblNetTotal.Text = Convert.ToString(netTotal);
}
}
Cobersion de % à Prix Code est :
private void textBox1_Leave(object sender, EventArgs e)
{
if (txtPercant.Text == "")
{
MessageBox.Show("Please Enter value in Percenent", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
double percent;
double grandTotal;
double per;
percent = Convert.ToDouble(txtPercant.Text);
grandTotal = Convert.ToDouble(txtGrandTotal.Text);
per = percent / 100 * grandTotal;
txtDiscount.Text = Convert.ToString(per);
double lblgrandTotal = 0.0;
double Disconunt = 0.0;
double netTotal = 0.0;
lblgrandTotal = Convert.ToDouble(txtGrandTotal.Text);
Disconunt = Convert.ToDouble(txtDiscount.Text);
netTotal = grandTotal - Disconunt;
//netTotal = Convert.ToInt32(grandTotal) - Convert.ToInt32(Discount);
lblNetTotal.Text = Convert.ToString(netTotal);
}
}
mais le problème je suis confronté est que je suis la conversion % des prix, et Vice-Versa, maintenant, dans le cas où je suis l'ajout de 12 à Prix, il dit 12.33%, et quand j'ai mis 12.33% il reconvertit à 11.997 Prix qui n'est pas le même et c'devrait être... il devrait être exactement 12 pas 11.997... vraiment confus en elle..!!
REMARQUE:
par prix, je veux dire que je suis le calcul de % de remise de prix et de rabais sur le total, les moyens, si j'ajoute 12%, alors qu'il calculer le prix d'escompte de total et, si j'entre le prix montant puis il calcule le %de réduction de total
Math.Round(2.77777777777778, 3)
je veux convertir la valeur par variable non la valeur réelle je ne sais pas la valeur de l'utilisateur à entrer à chaque fois bro @L. B
Math.Round(d, 3)
Grâce Fonctionné pour moi 🙂
un plus de problèmes se posent ici, quand je suis saisie de 12 à Prix, il dit 12.33%, et quand j'ai mis 12.33% il reconvertit à 11.997 RS, qui n'est pas le même et c'est... :/
OriginalL'auteur Ahsan Hussain | 2014-01-25
Vous devez vous connecter pour publier un commentaire.
Math.Round(per, 3)
Cependant, vous avez deux erreurs logiques dans votre démarche. Vous utilisez
double
de traiter avec des montants et pourcentages qui s'appliquent à elle.double
est approprié pour une utilisation avec les choses naturelles dans le monde réel, comme la longueur de votre nez, ou le nombre de secondes entre une célébrité d'être arrêté et une blague à ce sujet figurant sur Twitter.De l'argent et le pourcentage des réductions ne sont pas les choses naturelles, mais artificielle des montants fondés sur les systèmes de numérotation.
Presque tous ces décimale en fonction, sauf pour les ouguiyas de Mauritanie, à madagascar ariaries, et les Maltais scudo, et plusieurs obsolètes devises (comme le vieux livre sterling, shillings et pence). Des trois utilisés à l'heure actuelle, les deux premiers sont de base-5 basé (et donc représentable en l'absence d'erreur dans un système décimal) et la dernière est rattachée à l'Euro, donc il n'y a pas besoin de s'inquiéter à ce sujet.
Maintenant, lorsque nous traitons avec le monde réel, nous avons eu des problèmes parce que notre système de numérotation est dans une base particulière, et ainsi nous obtenons des résultats comme
0.33333333333333333333333333333
.Avec de l'argent, nous ne pouvons obtenir ces erreurs avec la division, parce que si nous diviser, rien ne force un base-limite d'erreur sur nous.
Mais
double
n'utilisez pas de décimal en interne, il utilise le binaire. Binaire a un nombre différent que le résultat récurrent chiffres après le point. E. g.0.1
et0.01
. La plupart du temps, les erreurs d'arrondi en présence vont s'annuler, mais parfois, ils ne le feront pas.Par conséquent, lorsque vous traitez avec de l'argent, toujours l'utilisation
decimal
plutôt quedouble
, sauf si vous avez une très bonne raison (si vous ne pouvez pas expliquer pourquoi le ci-dessus ne s'appliquent pas à votre cas, alors vous n'avez pas).Le deuxième problème est que depuis que vous êtes en train de faire des pourcentages, vous faites de la division, et ainsi vous aurez toujours obtenir quelques erreurs d'arrondi.
La solution est de stocker un plus de décimales que vous avez besoin. E. g. si vous souhaitez une précision de 3 décimales (comme vous dites) puis le magasin 4.
Par exemple, si à un moment nous nous sommes divisés 12 par 7 et arrondi à trois points, nous aurions 1.714. Si nous avons ensuite multiplié par 7, de nouveau, nous aurions 11.998. Si toutefois nous avions stocké les quatre virgule 1.7143 et ne s'affiche 1.714, puis en multipliant par 7 une fois encore nous donner 12.0001 qui nous avait d'affichage (arrondi à 3 endroits à nouveau) 12.
Nous ne pouvons pas éviter les erreurs d'arrondi, mais nous pouvons travailler à une plus grande précision jusqu'à ce que le dernier moment nécessaire, de sorte que les erreurs d'arrondi sont eux-mêmes perdus de l'arrondissement.
J'ai seulement écrit des livres sur les religieuses et magiques sujets à ce jour, mais n'hésitez pas à me cherchez sur Amazon si vous êtes intéressé.
OriginalL'auteur Jon Hanna
Solution : si vous souhaitez obtenir seulement 3 chiffres après le point décimal, vous pouvez suivre les étapes ci-dessous:
Étape 1: multiplier le double de la valeur (en pourcentage) avec
1000
pour déplacer le point décimal après 3 chiffres à partir de la position actuelle.Étape 2: Tronquer la partie décimale que nous n'avons pas besoin de chiffres après la position du point décimal à l'aide de
Math.Truncate()
Méthode.Étape 3: maintenant diviser le résultat(partie tronquée) avec
1000
déplacer la virgule avant le 3 chiffres.Remarque : assurez-vous que avant de se convertir à partir de
DiscountPercentage
àDiscountPrice
ensembleDiscountPrice
zone de texte valeurzero
et vice versa.Essayez Ceci:
EDIT : vous avez ajouté qu'une façon de conversion:
Essayez Ceci:
pourriez-vous s'il vous plaît partager le code qui vous tentent?
ouais, bien sûr, de l'Édition à la Question de Monsieur !!
BTW prix par vous dire
GrandTotal
droit?nop vous dit que je suis le calcul de % de remise de prix et de rabais sur le total, les moyens, si j'ajoute 12%, alors qu'il calculer le prix d'escompte de total et, si j'entre le prix montant puis il calcule le %de réduction de total
OriginalL'auteur Sudhakar Tillapudi
Première chose que vous devez utiliser
Decimal
et pasfloat
oudouble
. Pour en savoir plus lire sur précision en virgule flottante.Pour arrondir un nombre donné d'utiliser
Bien sûr, vous perdez un peu de précision après avoir contourné; Si, de par sa conception, il n'y a pas de pourcentages avec plus de 3 la précision des chiffres, c'est la façon correcte de le faire. Mais que faire si il n'y a pas de limite? Cela signifie que
vous donne une valeur différente de
Donc, on commence à penser que peut-être l'arrondissement devrait seulement être fait à la fin.
C'est mieux... mais que faire si le carré est l'entrée d'une autre de multiplication ou de division? Ensuite, la même perte de précision problème se produit.
Donc ce que l'application doit être en train de faire est de stocker le maximum de précision possible, mais juste à la sortie de quelque chose de plus agréable pour l'homme derrière l'écran.
Ceci est accompli par l'arrondissement que dans la couche d'INTERFACE utilisateur et non dans l'application de la couche de
Console.WriteLine("{0:F3}", d);
Que vous pourriez résumé en fournissant une propriété calculée pour votre zone de texte
OriginalL'auteur Luis Filipe