在asp.net中实现从十进制到逗号的CultureInfo

本文关键字:CultureInfo 十进制 asp net 实现 | 更新日期: 2023-09-27 18:00:49

我必须在报告向导中将十进制值转换为逗号(,(。所以我尝试在代码隐藏页面中实现以下CultureInfo("fr-FR")代码。

transactionMaster = transactionSettings.GetTransactionMasterForFleetSalesReport
                           (
                            strCardNumber,
                            TypeDropDownList.SelectedValue.ToString(),
                            Convert.ToDateTime(SearchFromdateTextBox.Text),
                            Convert.ToDateTime(SearchToDateTextBox.Text)
                           );
foreach (var data in transactionMaster)
{
    string withcomma = "";
    Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
    withcomma = data.Total.ToString();
    withcomma.ToString(CultureInfo.InvariantCulture);
    data.Total = withcomma;
}   
ReportDataSource datasource = new ReportDataSource("FleetSalesAll", (object)transactionMaster);
TransactionCount = transactionMaster.Count;
ReportViewer1.LocalReport.DataSources.Clear();
string name = datasource.Name;
ReportViewer1.LocalReport.DataSources.Add(datasource);
ReportViewer1.LocalReport.ReportPath = Server.MapPath(".") + "''IndividualFleetSaleReport.rdlc";
ReportViewer1.LocalReport.EnableExternalImages = true;
ReportParameter[] rp = new ReportParameter[5];
rp[0] = new ReportParameter("FromDate", this.SearchFromdateTextBox.Text);
rp[1] = new ReportParameter("ToDate", this.SearchToDateTextBox.Text);
rp[2] = new ReportParameter("ReportHeader", "Individual Card Transactions");
rp[3] = new ReportParameter("ReportExecutionTime", DateTime.Now.ToString());
rp[4] = new ReportParameter("ImagePath", "file:////" + Server.MapPath("~/Images/company-logo.png"));
this.ReportViewer1.LocalReport.SetParameters(rp);                       

事实上,我已经用十进制数据类型声明了这个总数。所以我来了获取:

无法将十进制转换为字符串**错误。

如果我把它转换成十进制,那么我就无法得到实际的结果。是否有使用Culture将decimal(.(转换为逗号(,(

在asp.net中实现从十进制到逗号的CultureInfo

即使您的输入使用逗号作为小数点,也不能将逗号存储在十进制数据类型中。这需要一根绳子,这是绝对不可取的。

相反,将您的输入保存为正确的Decimal;基本上:

data.Total = Decimal.Parse("your input", CultureInfo.CreateSpecificCulture("fr-FR"));

然后,数据中就有了一个干净可行的十进制数据类型。Total(您似乎已经有了(,您可以在任何地方显示您想要的内容,并安全地在上面执行计算。

当您需要向用户显示您的十进制值时,您可以将您的十进制数据类型格式化为特定的区域性。

string withcomma = data.Total.ToString(CultureInfo.CreateSpecificCulture("fr-FR"));

这样,您就不会出现奇怪的数据类型转换错误或错误的计算,而且您仍然可以将其显示为逗号小数点。

使用错误的数据类型是导致计算机系统错误的主要原因,因此保持正确的数据类型并将其转换为输出始终是最好的方法。这就是全球化在.NET.

中的用途

真的不知道你要去哪里——如果data.Total是十进制的,那么它在法语或英语机器上也没关系。如果要强制某些区域性来打印数据,可以使用data.Total.ToString(culture)

MSDN:http://msdn.microsoft.com/en-us/library/shxtf045(v=vs.110(.aspx

culture = CultureInfo.CreateSpecificCulture("eu-ES");
Console.WriteLine(value.ToString(culture));
// Displays:    16325,62
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Displays:    16325.62

所以应该是

CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR");
string withcoma = data.Total.ToString(culture);

编辑:

尝试添加

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");

在页面加载的某个地方,也删除foreach,这是不可能的。