Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Affichage nombre en notation technicien

Je n'ai jamais trouvé dans Qt une fonction permettant d'afficher un nombre en notation technicien, donc j'en ai bricolé une.

Elle prend en paramètre un nombre converti en QString.

Elle renvoie un QString contenant le nombre affiché en notation technicien si la QString d'entrée représente un nombre valide, sinon elle retourne la QString d'entrée.

Elle arrondi a 4 chiffres significatif.

QString fen::versAffichageTech(QString nombre)
{
QString retour = nombre;

bool negatif = false;
if(nombre.startsWith("-"))
{
negatif = true;
nombre.remove(0,1);
}

nombre = nombre.toLower();
//nombre.replace(",", ".");
bool ok = 0;
double d = QVariant(nombre).toDouble(&ok);

nombre = QString::number(d, 'g', 4);

if(!ok)
{
//QMessageBox::warning(this, "Erreur", nombre + " n'est pas un double");
return retour;
}

int exposant = 0;
QString partieEntiere, partieDecimale;

QStringList lst;

lst = nombre.split("e", QString::SkipEmptyParts);
if(lst.size() > 1)
{
exposant = QVariant(lst.at(1)).toInt(&ok);
if(!ok)
{
//QMessageBox::warning(this, "Erreur", "exposant: " + lst.at(1) + " n'est pas un int");
return retour;
}
}

lst = lst.at(0).split(".");

partieEntiere = lst.at(0);

if(lst.size() > 1)
{
partieDecimale = lst.at(1);
}

partieEntiere = partieEntiere + partieDecimale;
exposant -= partieDecimale.size();

while(exposant % 3 != 0)
{
partieEntiere.append("0");
exposant --;
}

while(partieEntiere.startsWith("0"))
{
partieEntiere.remove(0,1);
}
if(partieEntiere.isEmpty())
{
return "0";
}

partieDecimale.clear();
while(partieEntiere.size() > 3)
{
partieDecimale.prepend(partieEntiere.right(3));
partieEntiere.remove(partieEntiere.size()-3, 3);
exposant += 3;
}

while(partieDecimale.endsWith("0"))
{
partieDecimale.remove(partieDecimale.size() - 1, 1);
}

if(partieEntiere.isEmpty())
partieEntiere = "0";

retour = partieEntiere;

if(!partieDecimale.isEmpty())
retour.append("." + partieDecimale);

if(negatif)
retour.prepend("-");

QString suffixe;
if(exposant == 9)
{
suffixe = "G";
}
else if(exposant == 6)
{
suffixe = "M";
}
else if(exposant == 3)
{
suffixe = "k";
}
else if(exposant == 0)
{
suffixe.clear();
}
else if(exposant == -3)
{
suffixe = "m";
}
else if(exposant == -6)
{
suffixe = "u";
}
else if(exposant == -9)
{
suffixe = "n";
}
else if(exposant == -12)
{
suffixe = "p";
}
else
{
suffixe = "e" + QVariant(exposant).toString();
}


retour.append(" " + suffixe);


return retour;
}
Connectez-vous ou Inscrivez-vous pour répondre.