Ce petit code convertit les nombres avec vigules en fraction
exemple: 0,025 = 1/40
mais pas le contraire
c'est amusant et sans prétention; j'ai juste limité les nombres à une certaine longueur de chiffes afin de limiter l'erreur dépassement de capaité.
Bonjour Dheroux
on peut améliorer l'algo
l'algo doit verifier la périodicité du nombre après le
séparateur décimal
si il y a répetition on applique l'algo du dessus
si non
on multiplie le nombre décimal par 10^(nombre de chiffre après le point) et ensuite on esaie de simplifier
ex 0.3 donne 3/10
0.33 donne 1/3
je laisse le travail pour alpha5
Bonjour SHAYW,
Sauf erreur de ma part, l'algo que tu mentionnes dans ton commentaire ne s'applique qu'aux nombres rationnels (périodicité trouvée dans le quotient).
Ne s'applique plus par exemple à ce nombre 0.50864736 dont on ignore par avance s'il est le quotient d'une rationalité (puisqu'il peut y avoir d'autres décimales inconnues apès le ....736)
Bonne journée
Salut
1 le séparateur décimal de mon pc est un . et non une ,
pour savoir le séparateur décimal
Dim decimalSeparator As String = Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
2 ton option strict est à OFF et non à ON
3 l'algo n'est pas efficace
ta fonction pgcd exécute parfois une boucle infinie
ex d'un algo sur ce site
http://www.webmath.com/dec2fract.html c'est en anglais
ex 0.428571428571
tu recherches s'il y a une répétition de chiffres
dans cette ex à partir du 6 iem chiffre après le .
donc on multiplie 0.428571428571 par 10^6
ce qui donne 428571.428571
on nomme x le nombre original x = 0.428571428571
x*10^6 = 428571.428571
x = 0.428571428571
on soustrait
x*10^6 -x = 428571
999999* x = 428571
x = 428571
------
999999
Bonjour,
Petits problèmes:
Exemple: 3,14159 donne 314159/100000
Exemple: 0,036251 donne 36251/1000000
Evidemment ces fractions sont exactes mais non satisfaisantes.
D'autre part, donnez un nom plus parlant aux TextBox ... exemple TxtNombreDecimal.text plutôt que textbox1.text
Donnez aussi un nom plus parlant à vos variables.
Et puis un peu plus de soin au niveau de l'interface graphique, c'est aussi important.
Merci de vos commentaires
mai c'est un code pour rire
on peut améliorer l'algo
l'algo doit verifier la périodicité du nombre après le
séparateur décimal
si il y a répetition on applique l'algo du dessus
si non
on multiplie le nombre décimal par 10^(nombre de chiffre après le point) et ensuite on esaie de simplifier
ex 0.3 donne 3/10
0.33 donne 1/3
je laisse le travail pour alpha5
Sauf erreur de ma part, l'algo que tu mentionnes dans ton commentaire ne s'applique qu'aux nombres rationnels (périodicité trouvée dans le quotient).
Ne s'applique plus par exemple à ce nombre 0.50864736 dont on ignore par avance s'il est le quotient d'une rationalité (puisqu'il peut y avoir d'autres décimales inconnues apès le ....736)
Bonne journée
1 le séparateur décimal de mon pc est un . et non une ,
pour savoir le séparateur décimal
Dim decimalSeparator As String = Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
2 ton option strict est à OFF et non à ON
3 l'algo n'est pas efficace
ta fonction pgcd exécute parfois une boucle infinie
ex d'un algo sur ce site
http://www.webmath.com/dec2fract.html
c'est en anglais
ex 0.428571428571
tu recherches s'il y a une répétition de chiffres
dans cette ex à partir du 6 iem chiffre après le .
donc on multiplie 0.428571428571 par 10^6
ce qui donne 428571.428571
on nomme x le nombre original x = 0.428571428571
x*10^6 = 428571.428571
x = 0.428571428571
on soustrait
x*10^6 -x = 428571
999999* x = 428571
x = 428571
------
999999
en simplifiant on obtient 3/7
allez essai cette fois ci de faire un effort
Petits problèmes:
Exemple: 3,14159 donne 314159/100000
Exemple: 0,036251 donne 36251/1000000
Evidemment ces fractions sont exactes mais non satisfaisantes.
D'autre part, donnez un nom plus parlant aux TextBox ... exemple TxtNombreDecimal.text plutôt que textbox1.text
Donnez aussi un nom plus parlant à vos variables.
Et puis un peu plus de soin au niveau de l'interface graphique, c'est aussi important.
Juste un petit effort, et ce sera parfait. Merci
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.