C ++将SATOSHI(uint64_t)转换为BTC(字符串),不带float / double

时间:2015-11-02 13:42:50

标签: c++

我需要构建一个带有uin64_t(SATOSHI)并使用BTC值吐出字符串的函数。 我被告知没有任何除法/浮点数,所以应该涉及普通的字符串操作。这是因为如果我去Satoshi / 1BTC,我会得到一个很好的价值,但不能正确地将它转换为字符串(由于四舍五入)

不知道如何做到这一点,知道:

uin64_t uiSatoshi = 1033468;
uint64_t uiOneBTC = 100000000;
std::string strBTC = "";

如何从UiSatoshi构建strBTC,知道BTC有8位小数。

尝试:

// SATOSHI TO STRING (for exchange)  
    int iSatoshi = 1033468;
    double dVal = (double)iSatoshi / (double)100000000;


    std::ostringstream out;
    out << std::setprecision(8) << dVal;
    std::string strOutput = out.str();

    printf("WRONG: %f\n", dVal);
    printf("TEST: %s\n", strOutput.data());

错误:0.010335 测试:0.01033468

但是当uiSatoshi的值= 101033468 时,它失败了 结果是圆的:测试:1.0103347

我想避免做浮点运算,只需从我所拥有的整数中创建一个字符串,添加前导零并在需要的地方放置点。

更新: 答案张贴在这里:C++ printf Rounding?

1 个答案:

答案 0 :(得分:2)

一个简单的转换例程如下:

A

不需要花车,我不是说这是完整的并准备好生产,但我相信你可以彻底测试它以检查它是否符合你的期望。它可以被优化 - 可能,但我会把它作为一个练习......