2014-01-30 143 views
7

我從csv文件獲取數據並將其解析到我的應用程序。在我的csv文件中,我有一列price,其價值當然是我項目中某個項目的價格。將十進制值格式化爲小數點後兩位的貨幣

然而,在CSV文件中的價格不包含結尾0, 例如,如果價格和產品$5.00,CSV文件有它$5,如果價格$9.60下,CSV有它作爲$9.6。其他價格,如$9.56罰款雖然。

這是我如何檢索csv文件售價:

Price = string.IsNullOrEmpty(columns[3].Trim()) ? 
    null : (decimal?)decimal.Parse(columns[3]), 

在我Price類設置爲public decimal? Price { get; set; }

如何格式化返回的內容以解決此問題?

Price = String.Format("Price: {0:C}", 
    string.IsNullOrEmpty(columns[3].Trim()) ? 
     null : (decimal?)decimal.Parse(columns[3])); 

我試過以上,但沒有奏效。

如何解決這個問題,以便將csv中的值設置爲$5.9的格式爲$5.90

編輯:

嘗試:

Price=decimal.Round(string.IsNullOrEmpty(columns[3].Trim()) ? 
    null : 
    (decimal?)decimal.Parse(columns[3]), 2, MidpointRounding.AwayFromZero); 

不知道如果我這樣做對嗎?

而且,我不能肯定我怎麼能在我的代碼使用以下選項:

decimalVar.ToString ("#.##"); 

也試過:

Price = string.IsNullOrEmpty(columns[3].Trim()) ? 
     null : (decimal?)decimal.Parse(columns[3], NumberStyles.Currency) 

但仍然無法正常工作。

+0

請使用'decimal'貨幣不'double'。請參閱[在c#中用於金錢的最佳數據類型是什麼?](http://stackoverflow.com/q/693372/580951) – Romoku

+0

@Romoku更改爲十進制類型,但沒有更改,仍然存在問題 – user3237078

+0

@AlexeiLevenkov請參閱上面的修改,試過但沒有工作 – user3237078

回答

15

您正在尋找"0:C2"看到Standard Numeric Format Strings

精度說明:小數位數

樣品:

String.Format("{0:C2}", 5d); //results in $5.00 
String.Format("{0:C2}", 5.9d); //results in $5.90 
String.Format("{0:C2}", 5.123d); //results in $5.12 
+0

好的,但Price在我的課程中設置爲小數類型。另外我無法指定每個值,它從我的csv的[3]列中退出。 – user3237078

+0

這個答案很好。你仍然把一個數字與文本顯示混淆起來。 – DonBoitnott

+0

我不明白爲什麼這個答案在我的答案達到相同結果時有加票,同時也解釋了所需的解析。只是有點困惑... – Lukazoid

0

這個答案將假定您的當地貨幣符號是$

使用Decimal.Parse(String, NumberStyles)解析字符串,即:

string priceFromCsv = "$5"; 
var priceAsDecimal = Decimal.Parse(priceFromCsv, NumberStyles.Currency); 

然後用Decimal.ToString(String)與格式「C」,回到一個完全形成的貨幣,即

priceAsDecimal.ToString("C"); 

這會給你具有正確小數位數的完全形成的貨幣。

+0

當我嘗試這個'Price = string.IsNullOrEmpty(columns [3] .Trim())? null:(double?)Decimal.Parse(columns [3],NumberStyles.Currency),「出現錯誤」名稱「NumberStyles」在當前上下文中不存在「 – user3237078

+0

不要緊,只需通過添加參考 – user3237078

+0

仍然無法正常工作。我一直在試圖將這與'string.IsNullOrEmpty(columns [3] .Trim())? null:(decimal?)decimal.Parse(columns [3])'但是我可以讓它工作 – user3237078

1

decimal s沒有「格式」 - 它們只是一個數字。它看起來像你試圖「分配」一個格式到Price列,你不能這樣做。根據你的第一個代碼示例,似乎你能夠將CSV輸入解析爲一個小數就好了。

你可以選擇格式,當你顯示的值,你沒有指出發生的地方。在一個應用程序?一份報告?另一個CSV?

+0

我從Web服務中的csv獲取數據,上面的代碼用於我的Web服務。 Web服務中的這些數據用於Windows 8應用程序。它返回的十進制罰款,所有我想要做的是修復四捨五入,以便價值5.9美元,將被格式化在我的web服務中使用我的應用程序作爲5.90美元 – user3237078

+0

你這樣做,當你顯示值_在app_中,而不是在導入數據時。 –

+0

所以這不能在Web服務上完成?但我已格式化其他csv項目在我的應用程序中使用 – user3237078

相關問題