2017-07-28 90 views
0

我有這樣的代碼:更改十進制格式

using (StreamWriter writer = new StreamWriter("C:\\Users\\HP8200\\Desktop\\teste.txt")) 
{    
    string numcont = _transaction.PartyFederalTaxID; 
    double numenc = _transaction.BillToPartyID; 
    double numfatura = _transaction.TransDocNumber; 
    DateTime data = _transaction.CreateDate; 
    double valor = _transaction.TotalAmount; 
    short zona = transaction.Zone.ZoneID; 
    //ean mal 
    string ean = transaction.ATDocCodeId; 
    double iva = 23; 
    //preçoantesdisc mal 
    double precoantesdisc = _transaction.TotalPaymentDiscountAmount; 
    double preconet = transaction.Details.TotalAdvancementNetAmount; 
    double quantidade = transaction.Details.Count; 
    double bonus = _transaction.TotalPaymentDiscountAmount;    

    writer.WriteLine($"{numcont};{numenc};{numfatura};{data.ToString("dd/MM/yyyy")};{valor};{zona}{Environment.NewLine}{ean}{iva};{precoantesdisc};{preconet};{quantidade};{bonus}"); 
} 
MessageBox.Show("saved"); 

和可變valor用「」分開的十進制數,我需要做一個「」有什麼辦法可以做到嗎?

回答

5

變量valordouble的類型,它不使用小數點分隔符,只有 格式的字符串具有。插入的字符串將其轉換並默認使用您當前的文化。您可以使用:

string valorStr = valor.ToString(CultureInfo.InvariantCulture); 
string line = $"{numcont};{numenc};{numfatura};{data.ToString("dd/MM/yyyy")};{valorStr};{zona}{Environment.NewLine}{ean}{iva};{precoantesdisc};{preconet};{quantidade};{bonus}"; 
writer.WriteLine(line); 
+0

它的工作,感謝 –

0

你需要指定正確的文化acording的語言環境,並使用ToString方法:

var culture = new CultureInfo("es-ES"); 

writer.WriteLine($"{numcont};{numenc};{numfatura};{data.ToString("dd/MM/yyyy")};{valor.ToString(culture)};{zona}{Environment.NewLine}{ean}{iva};{precoantesdisc};{preconet};{quantidade};{bonus}"); 

用正確的文化標識替換 「ES-ES」(ES-ES使用逗號,但更好地使用你自己的,我想它是pt-BR)。

+0

感謝您的建議。 –

+0

@joaocosta我看過你的問題了......正確的答案是Tim的,我會刪除這個答案。 – Gusman

0

爲了能夠這樣做,你必須做出這樣的:

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 

將設置NumberDecimalSeparatorCurrentCulture"."

就用ToString方法像這樣:

這種方法的
valor.toString("N", System.Globalization.CultureInfo.CurrentCulture.NumberFormat); 

缺點是,你會覆蓋爲CurrentCulture默認NumberDecimalSerpator。所以,如果你關心的是你可以創建一個新的NumberFormatInfo

var nfiOrg = System.Globalization.CultureInfo.CurrentCulture.NumberFormat; 
var nfiNew = new System.Globalization.NumberFormatInfo(); 
nfiNew.NumberDecimalSeparator = "." 
nfiNew.NativeDigits = nfiOrg.NativeDigits; 
// set all of the other fields of nfiNew 

,然後用它在ToString電話:

valor.toString("N", nfiNew);