Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理

问题一:QString.toDouble有效位只有6位

  QString sVal="1234.5678";
  double dVal=sVal.toDouble();
  qDebug()<<"字符串转 double:"<<<

问题二:小数点有效位数的问题

Qt的浮点数计算,四舍五入保留都比较麻烦。尤其是int 1234567想转为double 123.4567。因为Qt又默认只保存前6位,所以数据就是123.457。所以对精度要求高的话,就不要直接1234567/10000.用除法。可以用字符串拼接的方法:

  //需求:保留4位小数
    //Index是要除以10000转double的值
    quint32 Integer=Index/10000;
    quint32 decimal=Index%10000;
    QString sVal=QString("%1.%2").arg(Integer).arg(decimal);
   //此处会有新问题,假如index%1000=567,那么数据就是123.567 此处真实值应该是123.0567)
   //下面可以解决:
    QString sVal=QString("%1.%2").arg(Integer).arg(decimal,4, 10, QLatin1Char('0'));//前位补0
   //4-小数点有效位数 10-进制 前位补0

你可能感兴趣的:(Qt开发,qt,开发语言)