如何将float number = 0.999
显示为0.99
?
以下代码会不断打印1.00
?我以为使用setprecision(2)
指定小数点后的位数?
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, char** argv)
{
const float numberToDisplay = 0.999;
cout << setprecision(2) << fixed << numberToDisplay << endl;
return 0;
}
答案 0 :(得分:13)
setprecision(2)
将舍入到最接近的两位浮点数,在本例中为1.0。如果你想截断(即得到0.99),你总是可以将数字乘以100(即10 ^ [数字]),转换为int,然后将其分成浮点数。有点乱,但它完成了工作。
const float numberToDisplay = 0.999;
const float numberTruncated = (int)(numberToDisplay * 100) / 100.0;
// float numberTruncated is 0.99
答案 1 :(得分:4)
我会使用floorf,因为我觉得它比其他一些解决方案更能表达你的意图。
cout << setprecision(2) << fixed << floorf(numberToDisplay*100)/100 << endl;
答案 2 :(得分:2)
简单:0.999四舍五入到两位小数是1.00。
答案 3 :(得分:0)
执行此操作的一种方法是将原始值拆分为整数和小数部分,将小数部分乘以100(因为您只需要2位数),然后再将其拆分以仅得到该部分的“整数”部分数。它不是非常优雅,但确实有效:
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main(int argc, char** argv)
{
const double numberToDisplay = 0.999;
double origInteger;
double origDecimal;
modf(numberToDisplay, &origInteger);
double decimal = numberToDisplay - origInteger;
//prints .999 even if the number is 12.999
cout << decimal << endl;
//results in 99 in origDecimal
modf(decimal * 100, &origDecimal);
//integer + .99
double final = origInteger + (origDecimal / 100);
cout << final << endl;
return 0;
}
编辑:转换为(int)比另一个答案中描述的要简单得多。
答案 4 :(得分:0)
好的,只是想分享一下我提出的解决方案:
以下是我解决问题的方法:
float const number = value / 1000.0f;
QString string = QString::number(number, 'f', 3);
string.chop(1);
基本上,算法是:
这种方法的缺陷是切碎并且必须指定3。
我对100万和1千兆(10 ^ 9)使用相同的逻辑,我必须将精度值更改为6和9,并将切换值分别设置为4和7。
答案 5 :(得分:0)
另外一个扔掉那里:
#include <cmath>
std::cout << numberToDisplay - std::fmod(numberToDisplay, 0.01f) << std::endl;