c++ - 确定小数点右边的非零位数

标签 c++

我想计算小数点右边非零和非重复(即 1.999999999)的数量。例如:

x.xx = 2
x.xxx = 3
x.xxx000 = 3

我可以通过将数字转换为字符串来做到这一点,但我想知道是否有使用数学的更快方法。有什么想法吗?

谢谢。

编辑: 由于数字在计算机中的表示方式,许多人似乎认为这是一件傻事。但是,请允许我解释问题的背景。假设您要编写一个方法来随机生成一个 float 。您生成的数字必须具有一定的精度,因此您必须将随机生成的数字四舍五入到指定的精度。例如,如果精度为 2,则您的随机数不能为 0.012,必须四舍五入为 0.01。问题是没有为您提供精度,而是为您提供增量,在上述情况下为 0.01。给定 0.01 或 0.002 或任何其他小于 1 的此类增量,您必须找到精度。

编辑:删除了我对术语“有效数字”的错误使用。

最佳答案

数量significant digits不是你通过查看数字来计算的东西。您可以根据用于计算您正在查看的数字的其他数字中的有效数字位数,或根据用于执行测量的仪器的精度来计算它。

既不显示也不使用无关紧要的数字,因此您的号码 x.xxx000 在小数点右侧有六位数字这一事实意味着所有这六位数字都是重要的。数字 2.3 与数字 2.300 不同。

当您有一个像 2300 这样的数字时,是否将零算作有效数字的问题就出现了,该数字是 10 的整数倍。有效数字是两位还是四位?用科学记数法写成:2.3 × 103 或 2.300 × 103

大多数语言(包括 C++)的原生数字类型不处理这种有效数字的概念。通常,他们甚至根本不处理数字;他们处理位。如果您的实现的 float 类型是 32 位,那么所有 32 位都始终被视为有效。

关于c++ - 确定小数点右边的非零位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1402624/

相关文章:

c++ - 函数调用表达式的类型是什么?

c++测试缺少的回调函数

c++ - 检查堆栈 C++ 中的最小值

c++ - 如何将组合的 Asio 操作与 C++20 协程一起使用以返回值?

c++ - 如何拦截 GNOME 中的键盘快捷键

c++ - 是否可以禁止修改 for 循环体内的循环变量?

c++ - 执行方法调用时,为什么不在 C++ 中添加嵌套类/结构解析?

C++11 for_each 和 lambdas 优化

c++ - 处理结构数组 : all in one place vs splitting vs arrays within structs 的正确方法

c++ - 无效的构造函数 token C++ Arduino