【问题标题】:Need help formatting numbers C++ [duplicate]需要帮助格式化数字C ++ [重复]
【发布时间】:2016-09-19 01:19:15
【问题描述】:

有人可以帮助新手吗?如果我有一个从方程式派生的数字4.561,我怎么能只显示.561 而忽略4

提前致谢。我是编程新手,这是作业的一部分。任何帮助将不胜感激。我在c++ 编码。

【问题讨论】:

  • 帮助我们帮助您。您使用什么语言?
  • 对不起。我自动假设。它是 C++。
  • 必须有一个很好的格式化方式,但如果 n=4.561 紧要关头,你可以显示 n-trunc(n)
  • 这与格式化数字无关

标签: c++ math numbers


【解决方案1】:

不确定这是否是您需要的,但请检查一下。

float f = 4.561;
f = f-(long)f;
cout << "Value of f is : " << f << endl;

【讨论】:

    【解决方案2】:

    使用来自math.hfloor 会感觉好多了:

    f = 4.561
    if (f>=0) f=f-floor(f);
     else     f=f-ceil(f);
    // here f = 0.561
    

    出于以下原因:

    1. 由于您无法控制转换为整数类型 (f-long(f)),至少我不知道它是否明确定义为标准,它使用整数部分或舍入。更不用说自定义类型的实现了。

    2. 如果你的浮点值持有更大的数字,那么你的整数类型可以持有怎么办?我知道对于更大的数字,小数部分没有那么多尾数位,但是如果 32/64/80/128/256 位或更多位很难说,并且如果整数部分,您没有指定使用哪种浮动数据类型大于用于截断非小数部分的整数数据类型,那么f-long(f) 会遇到麻烦。

    附言。

    可以通过在操作前后屏蔽进出符号位来避免 if 语句。例如,在标准 32 位浮点上,它看起来像这样:

    float f=4.561;         // input value
    DWORD *dw=(DWORD*)(&f); // pointer to f as integer type to access bits
    DWORD m;               // sign storage
    m=(*dw)&0x80000000;    // store sign bit to m
    (*dw)&= 0x7FFFFFFF;    // f=fabs(f)
    f-=floor(f);
    (*dw)|=m;              // restore original sign from m
    // here f = 0.561   
    

    如果您没有 DWORD,请改用任何无符号 32 位整数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多