设计产品中会遇到很多类型的数据,当数据类型为小数时,就需要对小数进行处理,但是我们很容易忽略对小数的思考,想当然的采取了四舍五入并保留两位小数的做法,本文想和大家仔细探讨处理小数时的细节。
一、是否需要保留小数
先来看下我们遇到的两个数字:第一个小数是对于某商品的定价4.5,第二个小数是对于需要载具的确定;当前有18斤米,每个袋子可以运走4斤米,需要的袋子是18 / 4 = 4.5,同时都得到了4.5这个带小数的数据。
根据生活常识很轻松就可以判断:商品定价4.5需要保留,而袋子4.5需要去掉小数——因为0.5的金额是有金融意义的,而0.5的袋子是不存在的。
通过这两个数字,我们能够发现:当我们遇到带小数的数据时,首先需要判断的是,这个小数部分是否需要被保留。
那么,什么情况下小数需要被保留呢?
- 小数部分具有业务价值,是现实情况在数据层面的一个反馈。通俗的讲就是这个小数部分的价值可以很明确的被人感知道,是约定俗成的,5元中的0.5就代表了现实生活中的5角钱,5.27米的0.27就代表了0.27米或者27厘米的长度。
- 小数部分具有数据分析价值,可以扩充数据分析的颗粒度,帮助我们观察更细致的数据变动。两种价值可以同时在一个数据中存在。
金融证券交易市场中,曾有过以整数作为计价法则的做法,这种做法没有错误的,但是对于股票的价格只能从整数级别去观察,1元挂单后就是2元,反映不出股票价格的细微波动。
更严重的是:当交易双方有一方愿意出的价格大于1元但是小于2元时,会放弃去挂单,难以成交,即使成交也有一方内心不满。
而引入小数计价法后,买卖挂单可以是1.60,1.61,1.62等,能更细致的反映金融市场的波动,也促使了交易市场更加活跃,这就是小数部分具有数据分析价值的实际运用。
二、确定需要保留的位数
再来看一个数字:
该数字是对于用户预期收益的展示,通过用户输入的本金,所选择的年化利率和投资周期,我们得到预期收益是2527.122794元。
根据上文的分析,我们可以得知:该数据的小数部分是用户金钱的反映,具有金融价值需要被保留,但是保留全部小数会导致页面无法放下或者页面缩放时无法兼容——这就需要我们保留部分小数。
这里同样考虑到人民币的最小单位是分,该数据保留两位小数即可确定需要保留小数后,就需要思考第二个细节“需要保留的位数”。
那么,我们如何确定需要保留的位数?
- 当遇到小数位数太长的情况时,因为并不是每个小数都具有业务价值的,可以通过业务价值来确定需要保留的位数,人民币的最小单位时分,涉及到金额相关的数据,超过两位小数的部分就没有业务价值,就可以保留两位小数。这是通过小数部分的业务价值来确定需要保留的位数
- 我们也能从足够观察出差异的数据角度确定需要保留的位数,这是通过小数部分的数据及价值来确定需要保留的位数
现在我们要计算得到某商品连续2日的销售额占比,分别为0.851223,0.856745,因为我们希望通过销售额占比分析商品连续2日的差异,可以发现从第三位小数就足够支持我们分析两者的差异,销售额占比保留3位小数即可,这就是通过数据价值来确定小数部分需要保留的位数
到这里,我们就能发现:保留位数并不是一个绝对的,是需要根据实际的业务情况或者所需要的数据价值来确定的。
三、选择取数进位的策略
确定需要保留的位数后,我们就需要思考第三个细节“选择怎么样的取数进位策略”。
我们怎么来选择呢?可以通过场景需要来选择:
1. 去尾法
依旧是预期收益这个数字2527.122794,确定保留两位小数后,需要对舍弃部分小数进行处理,因为预期收益是金融数据,在金融领域我们会要求处理后的数据不超过原数据,否则银行或者金融公司需要承担多出部分的价值,所以这里需要对数据进行去尾法处理,得到处理后的数据为2527.12。
通过上面的数字,我们能够了解到:当我们所遇到的场景带有不超过的约束条件时,就需要我们在去掉多余部分的数据时,直接保留最后一位数字。
这样做的目的是:保证处理后的数据比原数据小,从而不会造成数据溢出的情况。
2. 进一法
一起来看这个数字:
现在有45个同学参加活动,每个同学需要发放1瓶水,1箱24瓶水,需要几箱水?
45 / 24 = 1.875
因为买1箱水的话有21个同学喝不到水,为了保证每个同学都能喝到水,需要对数据进行进一法处理,得到处理后的数据为2。
通过上面的数字,我们能够了解到:当我们所遇到的场景带有不少于的约束条件时,就需要我们在去掉多余部分的数据时,在保留部分的最后一位数字加1,保证处理后的数据比原数据大,从而不会造成数据无法满足或覆盖的情况。
如果我们面对场景不带有上述两种方法不少于或者不超过的约束条件时,就可以选择我们最通用的方法四舍五入,使的被保留后的数据与实际值差值不超过最后一位数量级的二分之一,追求数据角度的最小误差。
四、总结
在设计产品中,小数的出现非常常见,但是很容易被我们忽略;实际上,简单的一个小数也可以分3个步骤去分析,“是不是要保留”,“要保留几位小数”,“保留后采取什么样的取数进位策略”。
仔细考虑每个环节的细节,选择合适的位数和取数策略,能帮助我们通过小数准确表达业务场景,反映真实的情况。
相反,不合适的方案,会带来数据歧义,引起误导,甚至产生严重后果。
作者:晌午,微信公众号:晌午自习室