Sujet : Re: Y a comme un défaut
De : mv (at) *nospam* gmail.com.invalid (M.V.)
Groupes : fr.comp.sys.mac.programmationDate : 04. Dec 2021, 16:49:53
Autres entêtes
Organisation : M.V. & Co
Message-ID : <sofv6h$psa$1@dont-email.me>
References : 1 2 3 4 5
User-Agent : MacCafe/2.07b1 (macOS 10.14.6 (18G9323) - MacBookAir7,2)
[Supersedes: <
sofuv0$lof$1@dont-email.me>]
Le 4 décembre 2021 à 15 h 25, Joseph-B a tenu les propos suivants :
Pour reprendre l'exemple de MV,
(2.001 -2) avec une calculette à moins d'un euro retournera 0,001
Ouais, mais c'est moche et trivial tandis que
(2.001 -2) dans AppleScript retournera 9.9999999999989E-4
En même temps on n'est pas loin de la vérité mathématique car, si tu te
rappelles tes cours de math du siècle dernier :
1 = 0,99999999999999999999999999999999… (ad libitum) ! ;-)
Ceci dit, je partage ton courroux (coucou) surtout quand je vois le
script que j'ai dû pondre pour obtenir un résultat correct (jusqu'à
preuve du contraire) pour éviter des résultats à la mords-moi le nœud.
J'en suis là :
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
set diviseur to 25.4
set serie to {0.254, 2.54, 25.4001, 254, 2540}
set restes to {}
set text item delimiters to " - "
set commentaire to "Restes de la division par " & (diviseur as text) & " de" & linefeed & (serie as string)
set exp0 to exp_value(diviseur)
log "exp0 : " & exp0
repeat with value in serie
set exp1 to exp_value(value)
log "exp1 : " & exp1
-- pour transformer 25.4 et 25.4001 par exemple en 254000 et 254001
if exp1 ≥ exp0 then
set exp to exp1
else
set exp to exp0
end if
set new_value to (value * (10 ^ exp)) as integer
set new_diviseur to (diviseur * (10 ^ exp)) as integer
set reste to (new_value mod new_diviseur) / (10 ^ exp)
if reste = (reste as integer) then set reste to reste as integer
copy reste to the end of restes
end repeat
set text item delimiters to " - "
display alert (restes's every item as text) message commentaire
-- combien de chiffres dans la partie décimale
on exp_value(nombre)
set nombre_str to nombre as string
log "nombre_str : " & nombre_str
set text item delimiters to ","
try
set exp to count characters of second text item of nombre_str
on error
set exp to 0
end try
return exp
end exp_value
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
-- Michel VAUQUOIS - <http://michelvauquois.fr>