You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 275 Reporter: administrator Status: closed Resolution: not a bug Priority: normal Severity: minor Category: ~DO NOT USE (was: OCaml general)
Je rencontre un pb avec la fonction float_of_string : elle
ne semble pas utiliser le même séparateur entre la partie
entière et la partie décimale, selon que l'on utilise ou
non lablgtk.
Un petit programme exemple :
(**********************************)
print_string "Avec le point:\n";;
let un_point_deux = "1.2";;
let f_un_point_deux = float_of_string un_point_deux;;
print_string un_point_deux;;
print_string " = ";;
print_string (string_of_float f_un_point_deux);;
print_string "\n";;
print_string (un_point_deux^" + 1.0 = ");;
print_string (string_of_float (f_un_point_deux +. 1.0));;
print_string "\n";;
on obtient l'affichage suivant :
Avec le point:
1.2 = 1.2
1.2 + 1.0 = 2.2
Avec la virgule:
1,2 = 1
1,2 + 1,0 = 2
Donc, dans ce cas, float_of_string utilise le point comme séparateur.
Maintenant, utilisons le toplevel créé lors de la compilation de lablgtk:
En faisant
./lablgtktop test.ml
on obtient l'affichage suivant :
Avec le point:
1.2 = 1
1.2 + 1.0 = 2
Avec la virgule:
1,2 = 1,2
1,2 + 1,0 = 2,2
Dans ce cas, float_of_string utilise la virgule comme séparateur.
Le fait de charger les bibliothèques C gtk modifierait-il le comportement
de la fonction C atof ?
The text was updated successfully, but these errors were encountered:
Je rencontre un pb avec la fonction float_of_string : elle
ne semble pas utiliser le même séparateur entre la partie
entière et la partie décimale, selon que l'on utilise ou
non lablgtk.
Nouvelle reponse, parce que JitterBug a mal classee la precedente, et pour
repondre a` Xavier.
Oui, comme l'a dit Jacques, c'est un problème inattendu avec la
"localisation" de la bibliothèque C: GTK appelle setlocale(), ce qui
avec les variables de ton environnement (qui doit être "francisé")
change les règles de parsing des flottants utilisées par atof() !
Ca offre une premiere solution: fixer LC_NUMERIC=C dans l'environnement, ce
qui devrait eviter le probleme pour peu que l'implementation de setlocale
soit correcte. A moins que tu sois tres attache' a la notation francaise.
Je trouve quand même que GTK est un peu limite sur ce coup-là:
setlocale() ne devrait être appelé que par le programme principal, et
non par une bibliothèque. Aussi, l'interface de "localisation" de la
libc est mal fichue, mais c'est standard :-(
C'est pas de la faute de GTK, mais de la mienne. C'est moi qui appelle
setlocale systematique lors de l'initialisation de la bibliotheque, comme
le suggere le manuel de GTK. Ca me parait assez naturel: setlocale est un
mecanisme general, pourquoi devrait-il etre optionel. Un programme qui ne
l'appelle pas sera pour toujours incapable de traiter le japonais.
Mais je m'en vais ajouter une fonction d'initialisation qui n'appelle
pas set_locale (lablgtktop continuera de l'appeler).
Original bug ID: 275
Reporter: administrator
Status: closed
Resolution: not a bug
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)
Bug description
Full_Name: Maxence Guesdon
Version: OCaml 3.00 + lablgtk 1.00
OS: Linux 2.2.x
Submission from: paris11-nas4-47-165.dial.proxad.net (212.27.47.165)
Je rencontre un pb avec la fonction float_of_string : elle
ne semble pas utiliser le même séparateur entre la partie
entière et la partie décimale, selon que l'on utilise ou
non lablgtk.
Un petit programme exemple :
(**********************************)
print_string "Avec le point:\n";;
let un_point_deux = "1.2";;
let f_un_point_deux = float_of_string un_point_deux;;
print_string un_point_deux;;
print_string " = ";;
print_string (string_of_float f_un_point_deux);;
print_string "\n";;
print_string (un_point_deux^" + 1.0 = ");;
print_string (string_of_float (f_un_point_deux +. 1.0));;
print_string "\n";;
print_string "Avec la virgule:\n";;
let un_virgule_deux = "1,2";;
let f_un_virgule_deux = float_of_string un_virgule_deux;;
print_string un_virgule_deux;;
print_string " = ";;
print_string (string_of_float f_un_virgule_deux);;
print_string "\n";;
print_string (un_virgule_deux^" + 1,0 = ");;
print_string (string_of_float (f_un_virgule_deux +. 1.0));;
print_string "\n";;
(**********************************)
En faisant
on obtient l'affichage suivant :
Avec le point:
1.2 = 1.2
1.2 + 1.0 = 2.2
Avec la virgule:
1,2 = 1
1,2 + 1,0 = 2
Donc, dans ce cas, float_of_string utilise le point comme séparateur.
Maintenant, utilisons le toplevel créé lors de la compilation de lablgtk:
En faisant
./lablgtktop test.ml
on obtient l'affichage suivant :
Avec le point:
1.2 = 1
1.2 + 1.0 = 2
Avec la virgule:
1,2 = 1,2
1,2 + 1,0 = 2,2
Dans ce cas, float_of_string utilise la virgule comme séparateur.
Le fait de charger les bibliothèques C gtk modifierait-il le comportement
de la fonction C atof ?
The text was updated successfully, but these errors were encountered: