Convertir une chaine en nombre

BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010 - 24 févr. 2005 à 22:15
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010 - 1 mars 2005 à 21:25
slt

j'ai crée une classe MX de grapheur de fonctions cartésiènes.

de fait, j'ai commencé à faire une fonction de conversion de strings to number, ce qui à première vue n'est pas très compliqué, mais qui risque d'être très long.

donc si qq l'à déja fait, ou vu, merci de me faire signe.

@+

pascal

8 réponses

cs_Edwige31 Messages postés 140 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 mars 2005
24 févr. 2005 à 23:15
Salut,
je te laisse un exemple que tu testeras ... tu comprendras tout seul ... :
var i = 0;
var s = "12.3e4";
trace(i);
i = new Number(s);
i++;
trace(i);
stop();

Edwige
0
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
24 févr. 2005 à 23:41
merci pour ta réponse, mais dans ce cas, il suffirait d'utiliser la puissance de parseFloat :

var s = "12.3e4";
trace(parseFloat(s));

@+
0
cs_Edwige31 Messages postés 140 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 mars 2005
25 févr. 2005 à 00:00
Non mais .. je sais !
C'est juste pour te monter que : i = new Number(s);
marche
(et dans tous les sens ... même le pire !) pour ce que tu cherches a faire et c'est pas la peine de refaire du code qui existe déjà ...

M'enfin ...

Edwige
0
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
25 févr. 2005 à 11:56
d'accord, alors essaye de convertir ça stp :

myString = "cos (2*x)+ 28/x-3";

bon courage ;-).

bien sur, avec 8ball, on aura peut être enfin une vraie fonction eval, mais d'ici là...

... suis obligé de créer une fonction eval avec au mons ouat mille lignes de code (au bas mot).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Edwige31 Messages postés 140 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 mars 2005
25 févr. 2005 à 23:04
Quand un message peu explicite s'intitule "convertir une chaine en nombre", on peut s'attendre légitimement à obtenir les réponses que tu as eues. Tu aurais dû appeler ce topic, solveur d'équation ou mettre une description plus appropriée comme dans ton dernier message.

J'ai une solution hyper simple mais qui entraine des contraintes : utiliser la puissance du eval de javascript.
1. oblige l'exécution de ton Flash dans une page HTML
2. lors de la saisie de la formule dans le champ de saisie, les cos, PI, ln doivent être précédé par "Math." comme en Flash je présume mais je ne suis qu'une débutante qui comprends rien aux problèmes des autres ;)
Ainsi donc, tu saisis la formule dont tu veux voir la courbe, puis quant tu itères sur les x, tu remplace x par la valeur et tu demandes à JavaScript de te fournir la valeur par un eval()
Au bas mot, un soir de dev, un soir de test, un soir pour fêter ça, en trois jours t'a fini :P

Edwige
0
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
26 févr. 2005 à 11:38
ben soit.
"j'ai crée une classe MX de grapheur de fonctions cartésiènes."
ce qui sous entends pour f(x) :(au hazard) y cos (1/x) ; y 2x+3; y =log(x)/x etc....
ce qui traduit en AS donne bien : var y = Math.cos(1/x) etc...
en fait tout est explicité dans la première phrase ! ! !
certes c'est élyptique, mais c'est là.

pour ta solution d'utiliser eval de java, en fait j'y ai pensé, et ça me parrait être une bonne solution, mais je vais travailler plutot sur un truc du genre (c'est juste un test pour voir si ça marche) :

_global.testNumber = "acos(0.2)";
_global.testArray = new Array();
function convertMathEquationToNumber(string) {
//test non dynamique
function test() {
for (i=0; i<=string.length; i++) {
if (string.charAt[i] == a) {
switch (string.charAt[i+1]) {
case c :
var x = 0.2;
testArray.push(Math.acos(x));
}
}
return (testArray[0]);
}
}
test();
}
convertMathEquationToNumber(testNumber);

ce qui me permetra d'utiliser les notations mathématiques conventionnelles.

l'idée en fait, est de créer une puissante fonction d'analyse de chaine (non figurée dans mon exemple) qui "slicera" chaque élément de la chaine dans un tableau (chiffres, opérateurs, variables, etc...)
ensuite, la fonction de conversion reprendra les valeurs du tableau en les remplaçant par les variables AS appropriées.
pour finir, on créera une variable globale qui assemblera toutes les variables créées en dynamique dans le tableau et qui retournera la valeur dans l'emplacement choisi de son code.

pour couper court à toute polémique, note bien que j'ai déclaré les variables de ma classe comme suit :
_global.simpleFunction = Math.atan(abscissa);
et que je cherchai juste à faire un truc du genre :pour ----- _global.simpleFunction "Math.atan(abscissa)" --- eval (simpleFunction) qui retourne --- simpleFunction Math.atan(abscissa)

voilà, maitenant j'ai quelque centaines de lignes de code à tapper, et je m'en serai bien passé. :-(

@+

pascal
0
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
28 févr. 2005 à 15:00
j'ai reçu un message d'un flashkodien qui me demandait si j'était arivé à convertir ma chaine en nombre.

donc pour ceux que ça peu interresser, voici un premier jet non commenté (AS1):

_global.testNumber_st = "2acos0.2";
_global.numericDatas_ar = new Array();
//--- Fonction d'analyse de chaines de valeurs mathématiques :
mathStringAnalyse = function (string) {
for (currentChar_i=0; currentChar_i<=string.length; currentChar_i++) {
var currentChar = string.charAt(currentChar_i);
if (currentChar>="0" && currentChar<="9" || currentChar == ".") {
for (j=currentChar_i, _global.currentNumber_i=0; currentChar == string.charAt(j) && (currentChar>="0" && currentChar<="9" || currentChar == ".") && j<=string.length-1; j++, currentNumber_i++) {
}
} else {
if (currentNumber_i) {
numericDatas_ar.push(parseFloat(string.substr(currentChar_i-currentNumber_i, currentNumber_i)));
delete currentNumber_i;
}
}
}
};

si certains sont interressés, je posterai une fois terminé.
si vous avez des idées ou des améliorations n'hésitez pas.

pascal
0
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
1 mars 2005 à 21:25
bon ben j'ai finalement réussi à émuler la fonction eval qui me retourne f(x).
le plus drole, c'est que les choses les plus simples sont souvent les meilleures.

@+ et bon code.

pascal
0
Rejoignez-nous