11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'aimerais formater le prix sous ce format en jquery : 59€00. Les chiffres après l'euro doivent s'afficher en petit et en haut. Merci par avance pour aide.

Cdlt,
Bonjour Dinolam,

En brut ton prix s'affiche sous quelle forme ?

A ce que j'en sais, JS ne gère pas le format monétaire nativement. Si tu n'as qu'une devise à gérer, pourquoi ne pas faire un remplacement de caractère via str.replace()?
var price = '25,30';
price = price.replace(',', '€');

/** Price devient 25€30 **/

Modifié par Greg_Lumiere (07 Mar 2017 - 18:53)
Bonsoir,
Si c'est simplement pour rechercher un prix dans un texte en HTML pour le formater, je propose :
const format = /(\d+[€$£])(\d*)?/g;
const texte = "J'ai acheté un objet à 35$95 et de l'essence pour 60€354.";
const texteFormate = texte.replace (format, (prix, $1, $2) => $1 + "<sup>" + ($2 === undefined ? "00" : $2 + ($2 < 10 ? "0" : "")) + "</sup>");

Si c'est à partir d'un nombre (ni trop grand ni trop petit) à mettre en euros :
const format = /(\d+)(?:\.(\d*))?/;
const nombre = 35.95;
const nombreFormate = nombre.toString ().replace (format, (prix, $1, $2) => $1 + "€<sup>" + ($2 === undefined ? "00" : $2 + ($2 < 10 ? "0" : "")) + "</sup>");

Je pense que c'est loin d'être optimal, car je ne suis pas très à l'aise avec les expressions régulières.

Par contre, il me semble qu'il serait plus rigoureux d'écrire (en France) quelque chose comme 35,95&nbsp;€. (notez l'espace insécable)
Modifié par TrisTOON (07 Mar 2017 - 19:57)
J'ai un petit souci concernant ton code @TrisTOON.
J'ai choisi la deuxième option : "Si c'est à partir d'un nombre (ni trop grand ni trop petit) à mettre en euros", car je récupère mon prix dans la base de données (dynamiquement).

Mon prix est par exemple : 13,9€.
Avec ton code ça m'affiche : 13€00,9
J'ai besoin d'un truc de ce genre : 13€^90

Je vous remercie.
Je précise le domaine d'application de ma seconde solution : elle portait sur un nombre, c'est-à-dire une variable de type Number (ex: 4.1), et non une chaîne (de type String) représentant un nombre (ex: "4.1").

Si j'ai bien compris, votre prix est-il bien sous la forme "<entier>,<entier>€" ?
Dans ce cas, je propose :
const format = /(\d+)(?:,(\d*))?[€$£]/;
const valeur = "13,9€";
const valeurFormatee = valeur.replace (format, (prix, $1, $2) => $1 + "€<sup>" + ($2 === "" ? "00" : $2 + ($2 < 10 && $2.length == 1 ? "0" : "")) + "</sup>");

J'en ai profité pour corriger une erreur, mais ça reste du bricolage...
Mon prix est de type float en base de données.
Je le récupère sous forme d'un objet JSON :
{
"Prix": "13,9",
"Stock": "6",
"Frais": "2,9"
}

Avec la dernière modification ça ne marche pas toujours.
Affiche ceci : 13,9
Modifié par dinolam (08 Mar 2017 - 14:34)
C'est bon ça a marché.
J'ai juste oublié de mettre l'euro après le prix.

Merci infiniment !

A bientôt !