在小数点后设置浮点数

Tha*_*ara 0 c++ c++11

我想写一个c ++函数,它将float转换为const char*.在此函数中,传递一个参数以指定输出值应表示的小数位.我已经提出了这个功能,它运行良好.

我想是否有更好的方法来编写这个函数?

static const char* getString(float value, int decimalPlaces)
{
     char strValue[sizeof value];
     sprintf(strValue, "%.%df", value, decimalPlaces);
     return strValue;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

您的功能有两个主要问题.

首先float是大多数平台上的四个字节的大小,这意味着你的数组只有四个元素.对于浮点值的所有数字都不够.写出界限将导致未定义的行为.

第二个问题是您返回一个指向局部变量的指针.strValue一旦函数返回,数组将超出范围,指针现在将成为所谓的杂散指针.取消引用它也会导致未定义的行为.

总之,你的功能也没有 "很好的工作".它根本不起作用.

显而易见的解决方案是使用std::stringstd::to_string将浮点值转换为字符串.然后当你需要一个C风格的以null结尾的字符串(无论出于何种原因)时,你使用字符串c_str()成员函数来获得这样的指针.

如果需要特定的小数位数,请使用std::ostringstream标准I/O操纵器以您希望的方式格式化字符串.如果您的目标是获取输出字符串,您当然可以跳过此步骤,并在编写输出时直接使用操纵器.