2016-02-01 3 views
1

dans mes valeurs de fichier csv point décimal est une virgule. Je peux donc ouvrir le fichier csv dans Excel et Excel ne formatera pas mes valeurs à ce jour.Comment convertir une chaîne avec virgule pour flotter dans QT?

Lorsque j'ouvre le fichier dans mon propre logiciel et que je convertis String en float, les valeurs ne peuvent pas être lues: bool ok renvoie false.

QTextStream stream(&file); 
QLocale locale = QLocale(); 
qDebug() << locale.decimalPoint(); //returns "," 
stream.setLocale(locale); 

QString LineFromFile = stream.readLine(); 
QStringList DataFromRow = LineFromFile.split(";"); 

QList<float> values; 
for (int i = 0; i < ValuesCnt; ++i){ 
    values.append(DataFromRow.at(i).toFloat()); 
    qDebug() << DataFromRow.at(i) << values.at(i); //returns e.g.: "700,1" 0 
} 
+0

Assurez-vous que 'DataFromRow.at (i)' contient pas d'espaces ou d'autres séparateurs. Vous pouvez essayer ensuite: 'DataFromRow.at (i) .trimmed(). ToFloat()'. –

Répondre

0

Vous définissez les paramètres régionaux pour le flux, cela ne fonctionne probablement, parce que je ne pense pas pas que les paramètres régionaux est transférée à l'élément du DataFromRow objet QStringList. Vous devez définir les paramètres régionaux pour eux. Cependant, je préfère utiliser les éléments suivants:

for (int i = 0; i < ValuesCnt; ++i){ 
    values.append(locale.toFloat(DataFromRow.at(i))); 

Voir la documentation de pintes de QLocale::toDouble()

+0

Merci! C'est ce que je cherchais. Lorsque je sauvegarde le fichier, je dois définir les paramètres régionaux pour le flux, de sorte que les valeurs seront affichées avec une virgule. – Cat