将float \ double数字格式化为CString,填充为零,预设位数为零

时间:2010-11-24 14:39:04

标签: c++ formatting floating-point cstring

我正在寻找一种简单的方法来将以下float \ double数字格式化为CString
我希望使用CString.Format(),但也欢迎替代方案,只要它最终成为CString。

3.45
112.2

采用以下格式:

00003450
00112200

注意应该有没有小数点
这可以简单地完成,如果是这样的话?

4 个答案:

答案 0 :(得分:3)

#include <iomanip>
#include <iostream>

std::cout << std::setw(8) << std::setfill('0') << int(int(YourNumber)*1000+.5);

应该这样做。

编辑:添加了舍入。 编辑:第二个int()强制转换隐藏模糊警告: - )

答案 1 :(得分:2)

f确实有用。

void f(double a) {
    const int a1000 = static_cast<int>(a * 1000 + 0.5);
    assert(a1000 < 100000000); 
    const int b = a1000 + 100000000;
    std::stringstream ss;
    ss << b;
    std::cout << ss.str().c_str() + 1; //remove first 1;
}

int main() {
    f(3.45);
    f(112.2);
}

答案 2 :(得分:1)

CString myString;
myString.Format(_T("%08d"), static_cast<int>(num * 1000.0 + 0.5));

可替换地:

//...
#include <sstream>
#include <iomanip>

using namespace std;

//...
ostringstream s;
s << setfill('0') << setw(8) << static_cast<int>(num * 1000.0 + 0.5);

CString myString(s.str().c_str());
//...

参考文献:

  1. CString::Format
  2. printf

答案 3 :(得分:1)

以下是使用Boost.Format的解决方案:

#include <boost/format.hpp>

CString f(double d)
{
   return str(boost::format("%1$=08.0f") % (1000*d)).c_str();
}