Existe-t-il un moyen de formater une décimale comme suit :
100 -> "100"
100.1 -> "100.10"
S'il s'agit d'un nombre rond, omettez la partie décimale. Sinon, formatez-le avec deux décimales.
Existe-t-il un moyen de formater une décimale comme suit :
100 -> "100"
100.1 -> "100.10"
S'il s'agit d'un nombre rond, omettez la partie décimale. Sinon, formatez-le avec deux décimales.
Je vous recommande d'utiliser le paquet java.text :
double money = 100.1;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String moneyString = formatter.format(money);
System.out.println(moneyString);
Cela présente l'avantage supplémentaire d'être spécifique à la région.
Mais, si vous le devez, tronquez la chaîne de caractères que vous récupérez si c'est un dollar entier :
if (moneyString.endsWith(".00")) {
int centsIndex = moneyString.lastIndexOf(".00");
if (centsIndex != -1) {
moneyString = moneyString.substring(1, centsIndex);
}
}
Vous ne devez jamais utiliser un double pour représenter des devises. Soit vous convertissez en long et gérez vous-même le point décimal, soit vous utilisez la fonction BigDecimal
avec un formateur. joda-money.sourceforge.net devrait être une bibliothèque agréable à utiliser une fois qu'elle sera terminée.
Je suis d'accord sur le fait que double != argent, mais ce n'est pas comme ça que la question a été posée.
Comment ça, c'est comme ça que les devises fonctionnent ? Je peux dire que quelque chose coûte 1 $ et non 1,00 $.... il y a différentes façons d'afficher les devises (autres que celles par défaut) et cette question demande comment omettre la partie décimale si c'est un nombre entier.
double amount =200.0;
Locale locale = new Locale("en", "US");
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale);
System.out.println(currencyFormatter.format(amount));
ou
double amount =200.0;
System.out.println(NumberFormat.getCurrencyInstance(new Locale("en", "US"))
.format(amount));
La meilleure façon d'afficher les devises
Sortie
$200.00
Si vous ne voulez pas utiliser de signe, utilisez cette méthode
double amount = 200;
DecimalFormat twoPlaces = new DecimalFormat("0.00");
System.out.println(twoPlaces.format(amount));
200.00
Ceci peut également être utilisé (avec le séparateur de milliers).
double amount = 2000000;
System.out.println(String.format("%,.2f", amount));
2,000,000.00
Il ne semble pas que "currency" soit référencé ou utilisé après sa déclaration... Y a-t-il un effet secondaire de la ligne 3 ? Ou une raison pour laquelle vous l'avez incluse ?
J'en doute. Le problème est que 100 n'est jamais 100 si c'est un flottant, c'est normalement 99.9999999999 ou 100.0000001 ou quelque chose comme ça.
Si vous voulez le formater de cette manière, vous devez définir un epsilon, c'est-à-dire une distance maximale par rapport à un nombre entier, et utiliser un formatage entier si la différence est plus petite, et un flottant sinon.
Quelque chose comme ça ferait l'affaire :
public String formatDecimal(float number) {
float epsilon = 0.004f; // 4 tenths of a cent
if (Math.abs(Math.round(number) - number) < epsilon) {
return String.format("%10.0f", number); // sdb
} else {
return String.format("%10.2f", number); // dj_segfault
}
}
Petit bémol : un flottant peut être exactement égal à 100, avec le schéma binaire 0x42c80000.
Je n'ai pas trouvé de bonne solution après une recherche sur Google, je me contente de poster ma solution pour que d'autres personnes puissent s'y référer. priceToString pour formater l'argent.
public static String priceWithDecimal (Double price) {
DecimalFormat formatter = new DecimalFormat("###,###,###.00");
return formatter.format(price);
}
public static String priceWithoutDecimal (Double price) {
DecimalFormat formatter = new DecimalFormat("###,###,###.##");
return formatter.format(price);
}
public static String priceToString(Double price) {
String toShow = priceWithoutDecimal(price);
if (toShow.indexOf(".") > 0) {
return priceWithDecimal(price);
} else {
return priceWithoutDecimal(price);
}
}
Il n'a jamais dit que c'était le meilleur. Il a juste posté sa solution pour que d'autres puissent s'en inspirer. Le moins que vous puissiez faire est de le remercier.
Que faire si je veux afficher le prix au format indien. Sans décimales. Format --> ##,##,###
À la méthode priceWithDecimal(Double), essayez de changer le masque "###,###,###.00"
à "###,###,##0.00"
pour afficher "0,00" lorsque la valeur est "0".
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.