Qt/C++プログラミング実現:デジタル変換万、億単位表示
構想:まず数字を指定位置の小数点を含む文字列に変換して、それから小数点の個数によって数字の変換後の単位を決定します(1つの小数点は単位を代表して万で、2つは億で、これで内に押します)最後にQStringの方式を通じて四捨五入します
ヘッダファイルの参照に注意
2つ目の方法はstdを借りる必要はありません
ヘッダファイルの参照に注意
#include
#include
#include
#include
class Num : public std::numpunct
{
protected:
virtual char do_thousands_sep() const
{
return '.';
}
virtual std::string do_grouping() const
{
return "\04";
}
};
int MainWidget::convertNum(QString & strNum, int num)
{
std::locale loc(std::locale(), new Num());
std::ostringstream oss;
oss.imbue(loc);
oss << num;
std::string v = oss.str();
int index = std::count(v.begin(), v.end(), '.');
int a = v.find_first_of('.');
if (index > 0) {
std::string result = v.substr(0, a + 1 + 2);
strNum = QString("%1").arg(QString::fromStdString(result).toDouble(), 0, 'g', a + 1);
}
else if (index == 0) {
std::string result = v.substr(0, 4);
strNum = QString::fromStdString(result);
}
return index;
}
2つ目の方法はstdを借りる必要はありません
int MainWidget::convertNum(QString & strNum, int num)
{
QString strInfoNum = QString::number(num, '.', 0);
int strLen = strInfoNum.length();
int index = 0;
while (strLen > 4)
{
strLen = strLen - 4;
strInfoNum.insert(strLen, ".");
index++;
}
if (index > 0) {
int x = strInfoNum.indexOf(".");
strInfoNum = strInfoNum.left(x + 3);
strNum = QString("%1").arg(strInfoNum.toDouble(), 0, 'g', x + 1);
}
else if (index == 0) {
strNum = strInfoNum;
}
return index;
}