2017-07-28 88 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);