gpt4 book ai didi

c++ - 计算 float 中的数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:22 31 4
gpt4 key购买 nike

我正在学习 C++ 中 OpenGL 的一些初学者教程,但是当我开始作为一名 C# 程序员时,它让我认为很多事情都是理所当然的。所以当我调试将 FPS 读数打印到输出时,我的问题就出现了。我认为该方法类似于 DebugPrintString 之类的东西,它占用了一个 char* 并且基本上我正在打印“FPS:x”。我正在使用 scanf_s 将 fps 值放入字符数组,但这是我的问题所在。字符数组必须有多大?

让我详细说明一下:我的 FPS 读数存储为 float ,因为帧/秒通常最终不是一个很好的数字。所以我的号码可能是 60,也可能是 59.12345。 60 只需要 2 个字节,而 59.12345 需要 8 个字节(期间为 1 个字节)。所以我想“哦,好吧,我需要计算它的位数,没问题!”男孩让我感到震惊。

我做了一个计算数字的方法,计算小数点左侧很容易,首先将它转换为 int 以删除小数点并除以 10(实际上我认为我有一些移位那里)并计算我可以这样做的次数,直到我达到 0。现在要计算右侧的数字,我将乘以 10,减去数字,然后这样做直到它达到零。我认为该方法通常会返回 32。所以我 WTF'd 并在调试中查看它,结果是当你乘以 float 时有效地将数字列向上移动,因为众所周知的精度问题它只是附加了另一个数字!

我做了一些主要的谷歌搜索,但实际上找不到 char str[128] 和 scanf if in then do strlen(str) minus 1(空终止符)之上的任何内容。但我希望有一个更优雅的解决方案。最后我只是将它转换为一个 int 并允许足够的 9999 fps,还添加了一个检查以查看 fps 是否 > 9999 但我认为那永远不会发生。比 SEG FAULT 更安全:(

TLDR:有没有办法获取 float 的位数? scanf 是怎么做到的?!

抱歉发了这么长的帖子,只是想分享我的挫败感>:D

编辑:拼写错误

最佳答案

考虑到我们正在谈论的是 C++,为什么不采用 STL 方式呢?

小数点后5位精度,字符数可变:

std::stringstream ss;
ss << std::setprecision (5) << std::fixed << f;
std::string fps = ss.str();

精度最大 5 位有效数字:

std::stringstream ss;
ss << std::setprecision (5) << f;
std::string fps = ss.str();

关于c++ - 计算 float 中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2151302/

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