最近有人在分享这个文章,
原本当作看笑话的我,回头审视了一下里面的内容,突然有另一个层面的看法.....
毕竟也是软件方面的心得,那就来分享一下吧.......
※ 引述《cyclone350 (老子我最神)》之铭言
: 纯抱怨
: PM 提了一个打折需求,我需要知道若商品打折后有小数点是如何进位
: 1. 四舍五入 2. 无条件进位 3. 无条件舍去
: 以下是我们对话 (我简称为 XXX)
: XXX: 请问商品打折后如果不是整数的话要怎么进位?
: 如果你没想法的话,我建议无条件舍去
: PM1: 为什么商品打折后不会是整数? 应该都要是整数阿
在某些编译器及语言中,
如果一开始储存的变量是以整数宣告的,没有经过特殊处理或是指定时,经过小数计算
之后仍然会以整数为储存数值
举例而言:
c语言为例
float aa=2.4;
float bb=2.6;
int a=aa*10
int b=bb*10
此时结果的a会是24,而b则会是25
至于为什么会有这种结果,
原因在于float bb储存的值实际上趋近2.5999999,取整数时25.999会被直接舍去小数点
变成25
这些例子有很多,但是对于系统上数量一多起来差异其实非常大,不能不小心
曾经有颗火箭就是这原因栽掉的......
另外就是重要的结论,float跟double在部分数值上表现时都是近似值,不是真正的数值
...避免这问题就要从浮点数本身储存格式注意,避免掉非二进制小数点形成的问题
回到这个问题本身,
如果我单纯原本储存的就是整数,不管怎么算这个东西会自动帮忙存成整数.....像是上
面就这样....
: XXX: 什么?
: XXX: 为什么是 80 元?
: PM1: 不是,应该是 20 元吧?
: PM2: XXX,到底是 80 元还是 20 元啊?
: XXX: 啥? 打折是什么意思之前没有共识吗?
: PM2: 当初的结论是什么?
: XXX: (讲一下打折是什么意思)
: PM1: 不对阿,那这样我要卖 20 元,我打八折后不是 20 元,我要怎么卖?
: XXX: 你可以定价设 20 元
: PM1: 是这样吗? 会不会我卖 20 元后打八折就不是卖 20 元
: XXX: ...?
: PM1: 这样 20 元的商品打八折后就变 16 元,不是 20元
: XXX: 对阿,然后?
: PM1: 可是我要卖 20 元阿
: XXX: 那你就不要设定打折阿
: PM1: 那我要打折又要卖 20 元的话怎么办
: XXX: (无视) 既然大家都知道打折的意义,
: 那现在可以让我知道 39 元的商品打八折要卖几元吗?
其实真正从从商业角度上来看,“打折”并不是这么简单的。打折不是单单以“单价多
少,售价打折就是多少”的直观概念去设计,反而更会以“我打算卖多少钱,那那个商
品的售价就是多少钱”才对,
举例而言,
我想卖一个进价成本为50元的商品售价为90元(利润要40元),销售策略上必须要使定
价打完八折为90元为标示,也就是说我固定某个利润或是售价,另外计算打折前的定价
,这样比较符合某些销售策略,
也就是X*0.8=90,此时的X就是目标定价
最后的结果会是X=0.8/9.........
更长远的设计,从进价成本去做获利运算,目标利润设在30%时,假设进价是in 售价是
out
1.3*in=0.8*out
上面就是基本的售价模型,
更进一步设计,里面的1.3的0.3跟8折的0.8是可以使用者自己设定的,这样才是一个面
向客户导向设计的一个模型,不是单单用“啊我打八折就是原本多少打八折就好了呀”
,因为商业中只会有成本、售价跟利润是最终计算结果,定价最多是短暂的、不稳定的
一个参考值而已....
: PM2: 这问题很复杂,上次我去饮料店点了一杯红茶,你知道怎么样吗?
: XXX: 不知道
: PM2: 我跟他说我要加珍珠,他要多收我 5 元
: XXX: 然后?
更深的探讨,加值服务或是类似游戏的DLC这种东西,都有它一定的意义跟计算方式,
我猜想,像是Steam平台那样,可以一款游戏打八折,一款游戏加补充包打七折仍然能稳
定获得可观利润.....
珍珠奶茶的珍珠成本3块钱,但是另外加5元的珍珠量的成本可能是4块,椰果是4块5...
PM可能没想这么远啦,但是今天我重新想了一次这两个小问题,感觉有更深的意义....
毕竟客户的需求,往往不是这么简单,不是吗?