Re: [心得] 跟 PM 談需求談到快崩潰

作者: ejsizmmy (pigChu)   2019-01-29 11:54:22
最近有人在分享這個文章,
原本當作看笑話的我,回頭審視了一下裡面的內容,突然有另一個層面的看法.....
畢竟也是軟體方面的心得,那就來分享一下吧.......
※ 引述《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可能沒想這麼遠啦,但是今天我重新想了一次這兩個小問題,感覺有更深的意義....
畢竟客戶的需求,往往不是這麼簡單,不是嗎?
作者: grief3 (^^~)   2019-01-29 12:08:00
軟體是工具 客戶的需求要怎麼滿足是規格 兩個混在一起?
作者: chuegou (chuegou)   2019-01-29 12:10:00
意義好深喔 看無
作者: grief3 (^^~)   2019-01-29 12:10:00
比較正確的分工應該是那些需求PM間經過充分討論後訂在規格而不是拉軟體工程師進來一起發散討論
作者: IhateOGC (我討厭)   2019-01-29 12:20:00
PM: 所以你能做到客戶需求嗎?客戶就是想打折PM : 不就是乘法嗎?連我不會寫程式的都會
作者: rice0617 (LittleRice)   2019-01-29 12:27:00
太看得起台灣的PM惹
作者: pttworld (批踢踢世界)   2019-01-29 12:45:00
實際的公式是SD補充SA文件寫的,PM僅止於要打折而已
作者: motherboard (媽的Ball)   2019-01-29 12:46:00
之前被ieee754搞死 某些語言邏輯運算會出事...
作者: pttworld (批踢踢世界)   2019-01-29 12:46:00
如果不是上述的配置,只能說專案人太少
作者: Wishmaster ( )   2019-01-29 13:40:00
珍珠多收五元,然後? XDDDDDDDDDDDDD
作者: gary75952 (MaRs)   2019-01-29 14:23:00
想太多。浮點算錢 一個基本工程師都會注意的東西。工作上 最討厭的往往是那些故意把很簡單的事情複雜化的搞得好像貢獻很高一樣
作者: MOONY135 (談無慾)   2019-01-29 14:52:00
PM:不就是打折 我把公式列給你 自己按計算機
作者: motherboard (媽的Ball)   2019-01-29 14:59:00
突然發現這個版好多人會把工作的情緒帶入討論 XD到底職場是有多不順阿..
作者: MOONY135 (談無慾)   2019-01-29 15:01:00
我覺得你把行銷該做的事情做掉了 那些計算是他要算的定售價的部分你開放給他自己修改 打折的部分你也開放中途的那些計算不是軟體工程師該討論也該做的你思考成蝦皮的折價卷系統就可以了 一堆賣家都自己調高售價
作者: a47135 (金屬史萊姆)   2019-01-29 15:13:00
其實就折數和折後數字讓使用者自訂就好了
作者: Ninja5566 (苦味)   2019-01-29 22:51:00
我怎麼記得火箭出事是因為溢位而不是小數點捨去
作者: THEWORLDS (天下)   2019-01-29 23:27:00
火箭那個是因為溢位沒錯 小數點沒精算曾經被用來在股賺錢 很多吸血蟲也利用程序員的粗心去各大賭博平台刷錢
作者: anandydy529 (AndyAWD)   2019-01-29 23:54:00
"PM間經過充分討論"你知道這樣出現的需求會多可怕嗎
作者: vn509942 (如履薄冰)   2019-01-30 02:23:00
小數點沒處理好精算 換匯跟放貸拆帳就準備脫褲子
作者: toothlesses (toothless)   2019-01-30 09:38:00
推 的確從這個角度寫或許會好一點
作者: alice78226 (紫)   2019-01-30 12:05:00
前公司針對小數點rounding的問題,要求會計每個月人工編表,調整資料庫與實際數的尾差,交易金額如果大,類加差異會到數十元。
作者: moom50302 (武林三羚鱷)   2019-02-07 11:16:00
以做過專案角度來說PM太發散,工程師也沒有把額外的責任適當地推掉

Links booklink

Contact Us: admin [ a t ] ucptt.com