相关疑难解决方法(0)

Printf宽度说明符,用于保持浮点值的精度

是否有printf宽度说明符可以应用于浮点说明符,该说明符会自动将输出格式化为必要的有效位数,以便在重新扫描字符串时,获取原始浮点值?

例如,假设我打印float2小数位数的精度:

float foobar = 0.9375;
printf("%.2f", foobar);    // prints out 0.94
Run Code Online (Sandbox Code Playgroud)

当我扫描输出时0.94,我没有符合标准的保证我将获得原始的0.9375浮点值(在这个例子中,我可能不会).

我想要一种方法告诉printf自动将浮点值打印到必要的有效位数,以确保它可以扫描回传递给的原始值printf.

我可以使用一些宏float.h导出要传递的最大宽度printf,但是是否已经有一个说明符可以自动打印到必要的有效位数 - 或者至少是最大宽度?

c floating-point printf c99 floating-point-precision

84
推荐指数
8
解决办法
21万
查看次数

将浮点数与三位小数进行比较

我想知道将浮点数比较到三位小数的最快方法.我有类似的东西

float lhs = 2.567xxxx
float rhs = 2.566xxxx
Run Code Online (Sandbox Code Playgroud)

上面应该是不同的,如果它是这样的

float lhs = 2.566xxxx
float rhs = 2.566xxxx
Run Code Online (Sandbox Code Playgroud)

它们应该是一样的

更新:

我正在尝试以下方面

double trunc(double d)
{
    return (d>0) ? floor(d) : ceil(d) ; 
}


bool comparedigits(float a , float b)
{
    if (trunc(1000.0 * a) == trunc(1000.0 * b))
    {
        return true;
    }
    return false;
}

    float g = 2.346;
    float h= 2.34599;
    bool t = comparedigits(g,h) ; //Not the same and should return false;
Run Code Online (Sandbox Code Playgroud)

然而它正在回归真实.

c++ floating-point

3
推荐指数
2
解决办法
8180
查看次数

C中的浮点舍入

我用浮动遇到了一些奇怪的舍入行为.下面的代码演示了这个问题.解决这个问题的最佳方法是什么?我一直在寻找解决方案,但没有太多运气.

#include<stdio.h>

int main(void)
{   
    float t;
    t = 5592411;
    printf("%f\n", 1.5*t);
    t *= 1.5;
    printf("%f\n", t);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码应打印出相同的值,但我在使用GCC 4.7.2进行设置时得到了这个值:

8388616.500000

8388616.000000

如果我使用计算器,我得到第一个值,所以我假设第二个值是以某种方式舍入.我有相同的Fortran代码,它不会对值进行舍入(具有0.5).

c floating-accuracy

2
推荐指数
1
解决办法
1663
查看次数

如何确定浮点数的值是否为整数?

我有一个程序,我需要在浮点数的情况下打印FLOAT或在常规数字的情况下打印INTEGER.

示例伪代码

float num = 1.5; 
if (num mod sizeof(int)==0)
  printf ("INTEGER");
else
  printf("FLOAT");
Run Code Online (Sandbox Code Playgroud)

例如:

  • 1.6将打印"FLOAT"
  • 1.0将打印"INTEGER"

这样的事情会起作用吗?

c

0
推荐指数
1
解决办法
234
查看次数

浮点字面值".1"与C中的"0.1"相同吗?

在C程序的源文本,请.10.1具有相同的价值?

c

-1
推荐指数
1
解决办法
84
查看次数