我怎么能准确地将双点数正常化为整数

how I can normal a double point number to a int number exacly?

本文关键字:正常化 整数 怎么能      更新时间:2023-10-16

我有一个通过tcp连接的客户端程序将数据发送到服务器。在客户端中,我需要向服务器发送一个规范化的十进制数以进行规范化 I 乘数十进制数到 100,000,然后将其发送到服务器,但我在服务器中得到错误的数字。例如。

double price;

我将其从 Gui 设置为 74.40

cout<<price; ---> 74.40

当我串行我的对象时,我发送

#define Normal 100000
int tmp = price*Normal;
oDest<<tmp;

在wireshrk中,我看到客户端发送了7439999。

为什么会这样?我怎样才能解决这个问题?

不要将任何内容存储为浮点值。请改用有理数,或使用固定点值。浮点值(如double)基本上是"作弊",以便将大量可能的值固定到合理的内存块中,并且它们必须做出妥协才能做到这一点。

如果您正在存储财务价值,请考虑存储便士或美分或任何最小面额

这是

由于浮点精度错误造成的。您可以添加一些舍入:

int tmp = (price + 0.5/Normal)*Normal;
由于

浮点数无法准确表示十进制数,因此在将数字转换为整数时,需要对数字进行舍入。

int tmp = price*Normal + 0.5;