-
25-09-2019 - |
题
我如何做数学题涉及显著人物在C ++?我想这个工作从化学和物理实验测得的数据是正确的。一个例子65/5 = 10。我需要摆脱不必要的小数和以0代替一些数字。
谢谢!
解决方案
另外存储在浮筒,双打或长双打您的附图将允许更精确的操作。
浮筒提供7个显著位数而双打提供16个显著数字。
另外打印出来的时候,通常人们使用_snprintf或printf和你可以格式化的双打,浮到你想要像精度:
float精度
的printf( “值%8.2f”,floatVariable);
这表示你需要一个总 的8个字符领域,8内 字符的最后2将举行 小数部分。
_snprintf(缓冲液,的sizeof(缓冲), “值%.2f”,floatVariable);
上面的例子 请求的最小场宽度和 最后两个字符将保持 的小数部分。
其他提示
这应该得到你所需要的:
std::cout.precision(x); // x would be the number of significant figures to output
这可能不是最有效的方式,但可以创建自定义图SIG数据类型。
class SigFigFloat
{
SigFigFloat(vector<short> digits, int decimalIndex, bool negative);
SigFigFloat operator+(const SigFigFloat &value);
SigFigFloat operator-(const SigFigFloat &value);
//etc...
}
它可以是一个大量的工作,但如果你实现这个权利,它可以代表与SIG无花果做计算一个非常灵活的方式。
有困难的,因为显著附图是一个十进制的概念,和计算机说话二进制。您可以使用十进制数类(我不知道的话),或使用的的boost ::间隔,这是最接近你一定要实现的。
这取决于你如何显示它们。如果您使用的是printf的家庭,你设定的精度(sprintf(buffer, "%.2f", myfloat)
)。如果你正在使用ostreams,调用精度函数来设置小数位的数量。如果你正在寻找的签名图的更科学的方法,你必须写一个基于浮动的电流值,确定精确的自定义功能。
这里是一个快速C ++ 11的解决方案,为我工作:
int sig_figs = 3;
double number = 1562.654478;
std::cout << "original number:" << number << std::endl;
number = ([number](int number_of_sig_figs)->double{
std::stringstream lStream;
lStream << std::setprecision(number_of_sig_figs) << number;
return std::stod(lStream.str());
})(sig_figs);
std::cout << "rounded number:" << number << std::endl;
不隶属于 StackOverflow