如何输出atof的结果为1.0而不是1

时间:2013-12-13 04:15:33

标签: c++ string-formatting

我使用atof有问题, 这是代码:

#include <stdio.h>
#include <cstdlib> 
#include <iostream>
#include <string>
using namespace std;

int main(){
    std::string num ("1.0");
    //std::string num ("1.1");
    cout<< atof(num.c_str());
    return 0;
}

如果num字符串是&#34; 1.1&#34; ,它可以正确地cout 1.1。但是如果我想在num字符串为&#34; 1.0&#34;时保持零。 (希望它是1.0而不是1),我该怎么办?

2 个答案:

答案 0 :(得分:2)

您需要使用std::fixedstd::setprecision,如下所示:

std::cout<< std::fixed << std::setprecision(1) << atof(num.c_str());

这将要求您添加iomanip标题。

答案 1 :(得分:0)

可能的解决方案是

#include <cstdio>
#include <iostream>
#include <string>
#include <iomanip>

int main() {
  std::cout.precision(3);
  std::cout.setf(std::ios::fixed);
  std::string s("1.0");
  float f = 0.0f;
  sscanf(s.c_str(), "%f", &f);
  // alternative way of setting this flags
  // std::cout << std::fixed << std::setprecision(3) << f << "\n";
  std::cout << f << "\n";
  return (0);
}

请注意,至少有两种方法可以为输出完成相同的格式,我将其中一个注释掉了。