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

How can I output the result of atof as 1.0 instead of 1

本文关键字:输出 atof 结果      更新时间:2023-10-16

我在使用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字符串为"1.1",则可以正确地cout 1.1。但是,如果我想在num字符串为"1.0"时保持零(希望它为1.0而不是1),我该怎么办?

您需要使用std::fixed和std::setprecision,就像这样:

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

这将要求您包含iomanip标头。

一种可能的解决方案是

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

注意到至少有两种方法可以实现相同的输出格式,我省略了其中一种。