首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能将一个双点数精确地归一化成一个整型数?

我怎样才能将一个双点数精确地归一化成一个整型数?
EN

Stack Overflow用户
提问于 2012-06-26 23:30:04
回答 3查看 98关注 0票数 0

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

代码语言:javascript
复制
double price;

我把它从Gui设置为74.40

代码语言:javascript
复制
cout<<price; ---> 74.40

当我序列化我的对象时,我发送

代码语言:javascript
复制
#define Normal 100000
int tmp = price*Normal;
oDest<<tmp;

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

为什么会发生这种情况?我怎样才能避免这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-26 23:35:30

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

如果你在存储金融价值,考虑存储便士或美分或任何最小面额的东西。

票数 1
EN

Stack Overflow用户

发布于 2012-06-26 23:35:05

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

代码语言:javascript
复制
int tmp = (price + 0.5/Normal)*Normal;
票数 0
EN

Stack Overflow用户

发布于 2012-06-26 23:35:18

由于浮点数不能精确表示十进制数,因此您需要在将数字转换为整数时对其进行舍入。

代码语言:javascript
复制
int tmp = price*Normal + 0.5;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11210757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档