istringstream四舍五入到最接近的美元

时间:2018-12-03 20:01:48

标签: c++ iostream

我有一个基于istringstream的模板函数,我发现字符串值“ 99999.99”会四舍五入为100000。实际上,我发现C ++ iostream通常在进行四舍五入。普通的ole标准C printf()处理得很好。对此有什么解决办法吗?

getUserMediaSuccess

编辑-了解使用浮点/双精度的要点,但是没有人运行我发布的代码。 printf()s正确打印值(9999.9999(浮点型)除外)。我更想知道为什么stdc库与C ++的差异。

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <unistd.h>
#include <algorithm>

using namespace std;


template <class T> bool from_string(T& t, const string& s, ios_base& (*f)(ios_base&))
{
    istringstream iss(s);
    return !(iss >> f >> t).fail();
}


class MyApp {
private :
public :
    MyApp();
    virtual ~MyApp();

    void run();

    operator bool() const { return true; }
};


MyApp::MyApp()
{
}

MyApp::~MyApp()
{
}

void MyApp::run()
{
    string elementData = "99999.99";
    double fproductUnitPrice = 0.0;
    double myval = 99999.99;
    double myval2 = 99999.95;
    float myval3 = 99999.99;

    from_string<double>(fproductUnitPrice, elementData, std::dec);
    cout <<  "fproductUnitPrice=" << fproductUnitPrice << endl;
    fproductUnitPrice -= 0.05;
    cout <<  "fproductUnitPrice=" << fproductUnitPrice << endl;
    cout <<  "myval=" << myval << endl;
    cout <<  "myval2=" << myval2 << endl;
    cout <<  "myval3=" << myval3 << endl;
    printf("myval %lf\n", myval);
    printf("myval2 %lf\n", myval2);
    printf("myval3 %lf\n", myval3);
}

int main(int argc, char* argv[])
{
    MyApp myApp;

    myApp.run();
}

0 个答案:

没有答案