我没有找到解决方案,在没有' 0'的情况下写十进制数低于1的解决方案。在小数点之前。 我希望以这种格式显示数字:" .1"," .2"等...
使用:
std::cout << std::setw(2) << std::setprecision(1) << std::fixed << number;
总是给我格式如&#34; 0.1&#34;,&#34; 0.2&#34;等...
我错了什么? 谢谢你的帮助
答案 0 :(得分:5)
您需要将其转换为字符串并将其用于打印。 如果没有前导零,则流无法打印浮点数。
std::string getFloatWithoutLeadingZero(float val)
{
//converting the number to a string
//with your specified flags
std::stringstream ss;
ss << std::setw(2) << std::setprecision(1);
ss << std::fixed << val;
std::string str = ss.str();
if(val > 0.f && val < 1.f)
{
//Checking if we have no leading minus sign
return str.substr(1, str.size()-1);
}
else if(val < 0.f && val > -1.f)
{
//Checking if we have a leading minus sign
return "-" + str.substr(2, str.size()-1);
}
//The number simply hasn't a leading zero
return str;
}
试一试online!
编辑:您可能更喜欢的一些解决方案是自定义浮点类型。 e.g。
class MyFloat
{
public:
MyFloat(float val = 0) : _val(val)
{}
friend std::ostream& operator<<(std::ostream& os, const MyFloat& rhs)
{ os << MyFloat::noLeadingZero(rhs._val, os); }
private:
static std::string noLeadingZero(float val, std::ostream& os)
{
std::stringstream ss;
ss.copyfmt(os);
ss << val;
std::string str = ss.str();
if(val > 0.f && val < 1.f)
return str.substr(1, str.size()-1);
else if(val < 0.f && val > -1.f)
return "-" + str.substr(2, str.size()-1);
return str;
}
float _val;
};
试一试online!
答案 1 :(得分:0)
在iomanip
库中,似乎无法在0
之前修剪cout
。您需要将输出转换为字符串。
这是我的解决方案:
double number=3.142, n; //n=3
char s[2];
sprintf (s, ".%d", int(modf(number, &n)*10));
//modf(number, &n)=0.142 s='.1'
cout << s;