我如何做数学题涉及显著人物在C ++?我想这个工作从化学和物理实验测得的数据是正确的。一个例子65/5 = 10。我需要摆脱不必要的小数和以0代替一些数字。

谢谢!

有帮助吗?

解决方案

那么有良好的数学库中文件math.h

另外存储在浮筒,双打或长双打您的附图将允许更精确的操作。

浮筒提供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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top