将 float\double 数字格式化为带有零填充和预设位数的 CString

发布于 2024-10-03 20:03:30 字数 276 浏览 2 评论 0原文

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

3.45
112.2

格式如下:

00003450
00112200

注意应该没有小数点
这可以简单地完成吗?如果可以的话怎么做?

I am looking for a simple method to format the following float\double numbers to a CString.
I was hoping to use CString.Format(), but alternatives are welcome as well, as long as it ends up being a CString.

3.45
112.2

To the following format:

00003450
00112200

Notice there should be no decimal point.
Can this be done simply, if so how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

七颜 2024-10-10 20:03:30
#include <iomanip>
#include <iostream>

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

应该可以解决问题。

编辑:添加了舍入。
编辑:第二个 int() 强制转换用于消除晦涩的警告:-)

#include <iomanip>
#include <iostream>

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

should do the trick.

Edit: Added rounding.
Edit: Second int() cast for silencing obscure warnings :-)

十秒萌定你 2024-10-10 20:03:30

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);
}

f does work.

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);
}
蛮可爱 2024-10-10 20:03:30
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
CString myString;
myString.Format(_T("%08d"), static_cast<int>(num * 1000.0 + 0.5));

Alternatively:

//...
#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());
//...

Refs:

  1. CString::Format
  2. printf
染年凉城似染瑾 2024-10-10 20:03:30

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

#include <boost/format.hpp>

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

Here's a solution using Boost.Format:

#include <boost/format.hpp>

CString f(double d)
{
   return str(boost::format("%1$=08.0f") % (1000*d)).c_str();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文