在C ++中使用atof将带有十进制的字符串转换为双精度

约翰尼·特兰(Johnny Tran)

在我的程序中,即时通讯试图读取带有“ $ 876,725.38”这样的钱的文件,我能够删除逗号和美元符号,并且现在尝试使用atof将字符串转换为双精度,但是即时通讯出现的问题是在打印后MONEYS转换后,我得到了其中大部分的句点之前的所有内容,但有些在句点之前少于6位数的确在句点之后打印了一位或两位数。如果有人对此有解决方案,将不胜感激。我是C ++的新手,需要帮助。谢谢!

主要问题:从字符串转换为双精度,十进制后的数据不会打印。

    void readFile()
{
    string line, nuMoney, munney, cents;
    unsigned long dollarSign, period;


    ifstream myfile("MONEY.txt");

    int numLines = countLines("MONEY.txt");
    //cout << "NUMLINES: " << numLines << endl;

    if (!myfile.is_open())
    {
        cout << "ERROR: File could not be opened." << endl;
    }

    for (int i=0; i < numLines-1; i++)
    {
        getline(myfile, line, '\n');
        dollarSign = line.find('$');
        period = line.find('.');

        line.erase (remove(line.begin(), line.end(), ','), line.end()); //remove commas

        munney = line.substr(dollarSign+1);
        //cout << munney << endl;

        //cents = line.substr(period);
        //cout << "Cents: " << cents << endl;

        //double CENTUS = atof(cents.c_str());
        //cout << "CENTUS: " << CENTUS << endl;

        double MONEYS = atof(munney.c_str());
        cout << MONEYS << endl;

        list<double> acct;
        acct.push_back(MONEYS);

    }

}

样本输出:

937380
404261
814158
30218.1
69340.1
479891
517241
7203.55
975619
59219.4
900052
539774
336799
347700
532466
83496.8
fredoverflow

您必须告诉输出流您想要点后的2位数字的固定精度:

#include <iomanip>
// ...
std::cout << std::fixed << std::setprecision(2) << MONEYS << '\n';

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 c# Windows 窗体中将带有十进制的 TextBox 字符串转换为十进制。

在Objective-C中将带点的字符串转换为十进制数

C#将字符串转换为双精度/十进制并返回字符串,保持尾随零,为数千添加逗号

使用C将十六进制字符串常量转换为十进制值

使用从 .csv 文件(stod、strtod、atof)中提取的数据在 C++ 中将字符串转换为双精度

将带有千位(和十进制)分隔符的字符串转换为双精度

C#将十进制转换为具有指定格式的字符串

如何使用C#将十进制转换为字符串

C ++将带有“:”的十六进制字符串转换为原始的“二进制”字符串

Arduino C / C ++将二进制字符串转换为十进制

C程序将十进制数转换为二进制字符串

将C中的十六进制字符串转换为十进制

如何在 C++ 中将十六进制转换为十进制字符串?

C ++从字符串输入将二进制转换为十进制

在C#中将带有二进制的字符串转换为二进制

c#将字符串值转换为十进制的正确方法

C#通过分隔数字将十进制转换为字符串

无法将参数值从字符串转换为十进制。C#?

将十进制转换为字符串 C#

C#如何精确地将双精度转换为十进制?

带有十进制数的 C# 字符串格式化为 int

C#:如何将十进制转换为字符串而不转换为指数表示

C ++将字符串精确转换为双精度

C#将十六进制字符串转换为十进制。为什么是负值?

使用c ....中的字符串将十进制转换为二进制...陷入某些概念错误

将 ASCII 十进制缓冲区转换为 C 中的字符串或字符数组

在没有C ++的情况下将字符串转换为双精度

在没有内存分配的情况下,在 C# 中将浮点数/双精度数/十进制数转换为 (u)int、(u)long

将长整数(十进制)转换为以36为基数的字符串(C中的strtol反向函数)