[英]F# Converting Currency from Excel
我正在嘗試將Excel工作表中的列轉換為F#應用程序中的浮點數。 問題是我不知道貨幣以哪種格式提供。 可以手動鍵入,帶或不帶符號,當然也可以帶。 和,符號總是一團糟。
是否有任何“簡短而甜美”的方式來警告似乎與實際浮點值無關的可能性數組,這些浮點值隨后在經過一些算術運算后可以打印為貨幣?
我遇到的一個附加問題:當Excel中的列標記為Number 600.00時,將通過互操作庫導出為600;否則,將通過interop庫導出。 534.20將作為534.2導出。 符號還不夠。
Excel中未顯示的符號將通過互操作庫導出為?。 (后跟一個空格)。
這些選項不起作用:
let ParseFloat1 (o:obj) =
float (o.ToString())
let parseFloat2 (o:obj) =
float (System.Single.Parse(o.ToString()))
經過這些嘗試,我發瘋了,開始使用russamafuzzin的解決方案,甚至連這個主意不好的巨龍也沒有用:
let ParseFloat o =
// ugly
let mutable _string = o.ToString()
// because of the weird "lets leave trailing zero's off behavior
let changeString (s:string) =
match s.LastIndexOf "." with
| 0 | -1 -> s + "00"
| 1 -> s + "0"
| _ -> s
_string <- changeString _string
let characters = _string.ToCharArray()
// remove all the non numbers from the string
let rec parse source dest =
match source with
| h::t ->
match h with
| '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0' -> parse t (dest + h.ToString())
| _ -> parse t dest
| _ -> dest
let _float = parse (Array.toList characters) ""
let result = (float (System.Single.Parse(_float))) / (float 100)
result
我真的希望有人能幫助我,因為這使我發瘋。 先感謝您。
編輯(16-11-2015) :
有效評論后的更多信息,感謝所有幫助和評論。
我將問題分解為更多的“部分”,因此為該應用程序引入了一些約定。 我認為沒有解決問題的辦法,因此我需要設置一些限制,並希望能做到最好……
CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
獲取小數點符號,並確保excel工作表中的列為Number類型,添加此類型的列並在需要時進行保存。 CultureInfo
相同。 擴展彼得的答案:
let ParseFloat o =
let decimalSeparator = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
let newv = String((o.ToString()) |> Seq.filter (fun c -> Char.IsNumber c || c = decimalSeparator) |> Array.ofSeq )
let rslt = match Double.TryParse(newv) with
| true, number -> (float number)
| false, _ -> throw "Cannot parse the number"
rslt
像這樣嗎
open System
let value = "£1,097."
let newv = String(value |> Seq.filter (fun c -> Char.IsNumber c || c = '.') |> Array.ofSeq )
let rslt = match Double.TryParse(newv) with
| true, number -> printfn"Converted '%s' to %.2f" value number
| false, _ -> printfn "Unable to convert '%s'" value
結果:
已轉換為“ 1,097英鎊”。 至1097.00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.