2017-05-21 51 views
0

我正在使用QTextStream將數據寫入文件。這是很好的組織(近乎完美),如:QTextStream按點對齊(十進制分隔符)

i   t   y   yy   
0 0.0166667 -0.649999  67.6666   
1 0.0333333 0.477777 -43.4444   
2  0.05 -0.246295  30.6295   
3 0.0666666 0.264197  -18.753   
4 0.0833333 -0.0483533  14.1687   
5   0.1 0.187791  -7.7791   
6 0.116667 0.0581394  6.85273   
7 0.133333 0.172351 -2.90181   
8  0.15 0.123988  3.60121   
9 0.166667 0.184008 -0.734136 

以上是由

stream << qSetFieldWidth(5) << i 
      << qSetFieldWidth(12) << t 
      << qSetFieldWidth(12) << y 
      << qSetFieldWidth(12) << yy 
      << endl; 

但我想通過點(小數點分隔符)列對齊方式生產,如:

0 0.0166667 -0.649999  67.6666   
1 0.0333333 0.477777 -43.4444   
2 0.05  -0.246295  30.6295   
3 0.0666666 0.264197 -18.753   
4 0.0833333 -0.0483533 14.1687   
5 0.1   0.187791  -7.7791   
6 0.116667  0.0581394  6.85273   
7 0.133333  0.172351  -2.90181   
8 0.15   0.123988  3.60121   
9 0.166667  0.184008  -0.734136 

我該怎麼做?

回答

1

您必須將數字拆分爲整數(右對齊)和小數部分(左對齊)(並從小數表示中去除前導零)。

更簡單的方法是將輸出填充適當的整數表示中的位數(也考慮符號)。

UNTESTED:

// inefficient, but illustrates the concept: 
int NumIntDig(double x) { 
    stringstream s; 
    s << int(x); 
    return s.str().size(); 
} 

stream << qSetFieldAlignment(AlignRight) << qSetFieldWidth(5) << i 
     << qSetFieldAlignment(AlignLeft) << 
     << qSetFieldWidth(4-NumIntDig(t)) << " " 
     << qSetFieldWidth(8+NumIntDig(t)) << t 
     << qSetFieldWidth(4-NumIntDig(y)) << " " 
     << qSetFieldWidth(8+NumIntDig(t)) << y 
     << qSetFieldWidth(4-NumIntDig(yy)) << " " 
     << qSetFieldWidth(8+NumIntDig(t)) << yy 
     << endl; 
相關問題