iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 23
0
自我挑戰組

全端工程師的日常挑戰三十日系列 第 23

Decimal in C# 的隱含轉換建構式

  • 分享至 

  • xImage
  •  

Decimal in 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)

    • Decimal(Double)
    • Decimal(Int32)
    • Decimal(Int32, Int32, Int32, Boolean, Byte)
    • Decimal(Int32[])
    • Decimal(Int64)
    • Decimal(Single)
    • Decimal(UInt32)
    • Decimal(UInt64)

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

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

    • 5 的 ascii code 就是 53

    • 詳細資料請看 Decimal Implicit 轉換 運算子

    • 整理如下

      傳入參數 輸出值

      Byte |8 位元不帶正負號整數
      Char |Unicode 字元
      Int16 |16 位元帶正負號的整數
      Int32 |32 位元帶正負號的整數
      Int64 |64 位元帶正負號的整數
      SByte |8 位元帶正負號的整數
      UInt16 |16 位元不帶正負號的整數
      UInt32 |32 位元不帶正負號的整數
      UInt64 |64 位元不帶正負號整數

  • 原始程式碼在這

參考資料

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

上一篇
fiddler 設定需驗證代理伺服器(proxy with authentication)
下一篇
Git reset 的三種模式( soft mixed hard )比較
系列文
全端工程師的日常挑戰三十日31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言