decimal 在 C# 中的隱含轉換建構式

最近有個工作項目是將原本 jsp 的金流相關功能,搬遷到 C# 上 重要性不言可喻,加下小弟寫 java 的時間並不長,還是寫 android,jsp 只有聽過的程度 ^_^||

本來想趁機好好觀摩 java 的架構跟設計方式,剛動手沒多久就狂卡關

為了避免耽誤時程 於是立馬改變策略 –> 單純進行一個人工翻譯的動作

在不瞭解流程面跟 java 語法的情況下,可以想見問題一定是少不了,

問題描述

客戶填的金額是 500000,結果程式竟然只紀錄了 53

問題解析

  1. 程式碼

    string a="500000";
    var b =new Decimal(a[0]);
    Console.WriteLine(b);//53
    
  2. 程式碼說明

    • a[0] 會將 a 這個 string 轉為 char[],接著取第 0 個位子也就是第一個數字 5
    • 5 可以理解,但 53 哪來的?

      果然就是自己對 decimal 瞭解太少造成的

  3. decimal 的建構子有下列幾種 (可參考 MSDN)

    • a. Decimal(Double)
    • b. Decimal(Int32)
    • C. Decimal(Int32, Int32, Int32, Boolean, Byte)
    • d. Decimal(Int32[])
    • e. Decimal(Int64)
    • f. Decimal(Single)
    • g. Decimal(UInt32)
    • h. Decimal(UInt64)

    發現了嗎?沒有一個是接受 char 的呀?!

  4. 魔鬼就在細節裡,Decimal 隱含轉換

  • 原始程式碼在這

    sourcecode

參考資料

  1. Decimal 建構函式
  2. Decimal Implicit 轉換 運算子