2013-12-13 93 views
0

是否有可能增加一個$使用FileHelpers庫中的字段的字段? 我有一個對象

[DelimitedRecord("|")] 
public class TradesToBloombergFileHeaders 
{ 
    [FieldOrder(1)] 
    public Guid id; 
    [FieldOrder(2)] 
    public string name; 
    [FieldOrder(3)] 
    public double price; 
    [FieldOrder(4), FieldConverter(ConverterKind.Date, "yyyyMMdd")] 
    public DateTime date; 
} 

我生成一個文件,並希望價格在此格式$ XXX.XX。 它甚至有可能嗎?我搜索,閱讀文檔,我沒有看到任何類似於我需要的東西。 謝謝!

+1

格式字符串'c2'會爲你做。 – SLaks

+1

我結束了創建我的自定義轉換器:公共類MoneyConverter:ConverterBase { 私人詮釋mDecimals = 3; 公共覆蓋對象StringToField(從字符串) { 返回Convert.ToDecimal(Decimal.Parse(從)/(10^mDecimals)); } 公共重寫字符串FieldToString(對象fieldValue方法) { 變種VAL = fieldValue方法== NULL? 0:Convert.ToDecimal(fieldValue); var valString =「$」+ val.ToString(CultureInfo.InvariantCulture); return valString; } } – Boroda

回答

0

大概屬性:

[FieldOrder(3), FieldConverter(ConverterKind.Decimal, "C")] 
    public decimal price; 

會爲你做的。正如你所看到的,我將其類型更改爲decimal,這對價格/金錢更好。

Standard Numeric Format StringsConverterKind enum


其實我從來沒有用過FileHelpers。頁面Arguments for the Default Converters of the library似乎表明我不能使用上面的"C"這樣的標準格式字符串。如果是這樣的話,試着模仿Decimal Custom Converter的例子,或許吧?

+1

謝謝。更改爲小數。我得到:您只能使用'。'或','作爲十進制或組分隔符異常.. – Boroda

0

我所做的一次是使將由私人文本文件中的數據將會被填充的屬性,並創建存取

[FieldOrder(3)] 
private double _price; 

public string price 
{ 
    get { return string.Format("{0}$", _price.ToString()); } 
    set { _price = Convert.ToDouble(value.replace('$', '')); } 
} 

您可能要調整一下轉換最終會尋找一個自定義的公共屬性喜歡,但你明白了。

0

@弗朗西斯的回答下面並沒有爲我工作,我沒有看到他的回答海報的評論,直到後來。我想我會把它清理乾淨,並將其作爲其他人絆倒這篇文章的答案,試圖弄清楚如何格式化輸出。

以我爲例,我是格式化字符串數據類型,所以我定義的「StringToField」方法來代替,但我提供的代碼,以解決以下海報的數據類型。

public class MoneyFormatter : ConverterBase 
{ 
    public override object FieldToString(string fieldValue) 
    { 
     var val = fieldValue == null ? 0 : Convert.ToDecimal(fieldValue); 
     return "$" + val.ToString(CultureInfo.InvariantCulture); 
    } 
} 

[FieldOrder(3)] 
[FieldConverter(typeof(MoneyFormatter))] 
public double price; 
相關問題