A9VG电玩部落论坛

 找回密码
 注册
搜索
楼主: SugarCoffee

写程序时,金额一般的单位是分,这样发8毛也不难理解了

[复制链接]

精华
0
帖子
1442
威望
0 点
积分
1557 点
种子
46 点
注册时间
2020-11-19
最后登录
2023-5-21
发表于 2022-6-9 15:21  ·  广东 | 显示全部楼层
不管最后原因是啥,这个0.80的出现都挺掉价的

精华
0
帖子
23726
威望
0 点
积分
25753 点
种子
3201 点
注册时间
2016-1-27
最后登录
2025-2-12
发表于 2022-6-9 15:43  ·  江苏 | 显示全部楼层
这种小bug 在游戏里一个hotfix就解决了, 你们都紧张成这样干什么,今天不是80到帐了么

你们啊, 就是为了骂而骂

精华
0
帖子
158
威望
0 点
积分
158 点
种子
50 点
注册时间
2021-10-29
最后登录
2024-6-24
发表于 2022-6-9 15:58  ·  浙江 | 显示全部楼层
那工钱干活的 就该仔仔细细的 怎么能犯这种 错误呢

精华
0
帖子
773
威望
0 点
积分
1254 点
种子
517 点
注册时间
2015-2-9
最后登录
2025-2-12
发表于 2022-6-9 16:00  ·  四川 | 显示全部楼层
感觉这个帖子里面好多专业大神

精华
1
帖子
5699
威望
1 点
积分
7141 点
种子
2435 点
注册时间
2015-4-5
最后登录
2025-2-12
发表于 2022-6-9 21:09  ·  美国 | 显示全部楼层
klaus.sang 发表于 2022-6-9 13:13
C我不太清楚,我用C#金额计算时浮点都是用decimal类型,从来不用float,从来没有这个问题,只有前端用JS ...

首先说明下我并没有做过相关方面啊,只是凭一点代码基础在讨论

我看了一眼C#的文档,我觉得decimal不能算浮点数吧,浮点数主要是牺牲了很多bit来放指数,使得数的范围(10^300)可以很大,但是精度只有6~7位。decimal大概率是按128位整数的方式存储的,因为他的范围比浮点数小很多而且占的空间也大很多,以及不是所有语言都原生有这种type

64位的整数范围到10^18了,应该足够人类正常范围的金融运算了。实在不够还可以用128位整数

浮点数不仅是乘除会有问题,加减法一样有精度问题,比如往10亿的账户里存5毛钱,这5毛钱肯定就直接消失了

精华
0
帖子
1185
威望
0 点
积分
2012 点
种子
1057 点
注册时间
2013-5-19
最后登录
2024-4-19
发表于 2022-6-9 23:45  ·  未知 | 显示全部楼层
给就事论事认真讨论的大神们点赞,看多了喷喷贴黑黑贴看到技术贴挺新鲜的,虽说这贴里也有喷喷和黑黑就是了
发自A9VG Android客户端
该用户已被禁言

精华
0
帖子
17700
威望
0 点
积分
19921 点
种子
3995 点
注册时间
2005-11-17
最后登录
2024-9-14
发表于 2022-6-10 00:06  ·  未知 | 显示全部楼层
反正是够细心的
发自A9VG iPhone客户端

精华
0
帖子
13055
威望
0 点
积分
13859 点
种子
978 点
注册时间
2005-2-3
最后登录
2025-2-12
发表于 2022-6-10 02:49  ·  荷兰 | 显示全部楼层
klaus.sang 发表于 2022-6-9 05:36
先支付0.1,再支付0.2,有什么不能理解?

可能我说的不明白吧,拿我直接问吧

0.1 + 0.2 = ?

精华
0
帖子
13055
威望
0 点
积分
13859 点
种子
978 点
注册时间
2005-2-3
最后登录
2025-2-12
发表于 2022-6-10 02:57  ·  荷兰 | 显示全部楼层
本帖最后由 feibu 于 2022-6-9 20:59 编辑
klaus.sang 发表于 2022-6-9 07:13
C我不太清楚,我用C#金额计算时浮点都是用decimal类型,从来不用float,从来没有这个问题,只有前端用JS ...


Decimal并不是float啊,是由4个32位的int代替的

这里是源代码
        // The lo, mid, hi, and flags fields contain the representation of the
        // Decimal value. The lo, mid, and hi fields contain the 96-bit integer
        // part of the Decimal. Bits 0-15 (the lower word) of the flags field are
        // unused and must be zero; bits 16-23 contain must contain a value between
        // 0 and 28, indicating the power of 10 to divide the 96-bit integer part
        // by to produce the Decimal value; bits 24-30 are unused and must be zero;
        // and finally bit 31 indicates the sign of the Decimal value, 0 meaning
        // positive and 1 meaning negative.
        //
        // NOTE: Do not change the order in which these fields are declared. The
        // native methods in this class rely on this particular order.
        private int flags;
        private int hi;
        private int lo;
        private int mid;
   

精华
0
帖子
13055
威望
0 点
积分
13859 点
种子
978 点
注册时间
2005-2-3
最后登录
2025-2-12
发表于 2022-6-10 03:08  ·  荷兰 | 显示全部楼层
NihiRagnarK 发表于 2022-6-9 15:09
首先说明下我并没有做过相关方面啊,只是凭一点代码基础在讨论

我看了一眼C#的文档,我觉得decimal不能 ...

64位的整数是说long吗?现在用python已经没有最大值限制了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2025-2-12 21:43 , Processed in 0.262718 second(s), 20 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部