gpt4 book ai didi

c++ - sprintf 等显示函数如何将数字转换为字符串?

转载 作者:行者123 更新时间:2023-11-30 03:12:41 25 4
gpt4 key购买 nike

我正在尝试提取浮点值的整数和小数部分,我似乎遇到了一些奇怪的舍入问题,这可能是由于 float 的存储方式不精确所致。

我有一些这样的代码来提取小数部分:

double number = 2.01;
int frac = int(floor(number * 100)) % 100;

然而,这里的结果不是 1,而是 0。这似乎是因为原来的 double 实际上被存储为:

2.0099999...

但是运行 sprintf 似乎可以正确进行这样的转换:

char num_string[99];
sprintf(num_string,"%f",number);

sprintf 是如何得到正确答案而上面的方法却没有?

最佳答案

> 然而,这里的结果不是 1,而是 1。

什么意思?

2.099999...

或者,更像是 2.00999...

正如您所注意到的:

int frac = int(floor(number * 100)) % 100;

将是:

int frac = int(floor(2.00999... * 100)) % 100;
= int(floor(200.999...)) % 100;
= int(floor(200.999...)) % 100;
= int(200) % 100;
= 200 % 100;
= 0;

您可能对 this 感兴趣.

此外,请参阅 math.h 中的 modf:

double modf(double x, double *intptr) /* Breaks x into fractional and integer parts. */ 

modf() 是比自己动手做更好的选择。

关于c++ - sprintf 等显示函数如何将数字转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com