gpt4 book ai didi

c++ - 准确提取 float 的小数部分

转载 作者:行者123 更新时间:2023-11-30 02:54:35 24 4
gpt4 key购买 nike

注意:我正在使用 C++ 的 Arduino 变体编写以下代码。

从给定的 float (总是有四位小数),我希望只提取小数部分(“尾数”)作为整数。

所以我尝试了这个方法:

void ExtractDecimalPart(float Value) {
int IntegerPart = (int)(Value);
int DecimalPart = 10000 * (Value - IntegerPart); //10000 b/c my float values always have exactly 4 decimal places
Serial.println (DecimalPart);
}

但是上面的结果如下:

ExtractDecimalPart (1234.5677); //prints 5677
ExtractDecimalPart (1234.5678); //prints 5677
ExtractDecimalPart (1234.5679); //prints 5678

注意后两者打印错了;我猜这是由于浮点精度问题。

解决上述问题的经济方法是什么?

最佳答案

这是一个很酷的问题。

我假设 ardiuno 使用的是 IEEE 754当您将 float 设置为等于 1234.5677 时,最接近适合 4 个字节的数字是 1.2345677490234375E3,它看起来像十六进制的 0x449A522B。

但是当您将 1234.5678 放入 float 时,它可以形成的最佳数字是 1.2345677490234375E3这很短。在十六进制中它是 0x449A522B。

因此简而言之, float 无法存储需要您使用的位数的数字。

关于c++ - 准确提取 float 的小数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16965637/

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