我的 C# 应用程序中有许多带有 int、decimal 变量的类。 考虑以下示例。
public class Employee
{
decimal TotalSalary;
public decimal Salary
{
get
{
return TotalSalary;
}
set
{
TotalSalary = value;
}
}
public string GetSalary()
{
return TotalSalary.ToString();
}
}
public class Contract
{
Employee emp1 = new Employee();
public void ProcessSalary()
{
emp1.Salary = 100000;
SendToLabel(emp1.GetSalary());
}
}
在上面的示例中,每当我在应用程序中使用任何decimal/int变量的“ToString”时,它都应该给我印度编号格式的数字,如下所示。
100000 应渲染为 1,00,000
10000 应渲染为 10,000
这应该在我的 C# .NET 应用程序中全局发生。 我可以使用 global.asax 页面中的 CultureInfo 来执行此操作吗?
现在为了格式化日期,我正在使用以下代码。
CultureInfo newCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
newCulture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
newCulture.DateTimeFormat.DateSeparator = "-";
Thread.CurrentThread.CurrentCulture = newCulture;
以下代码将对您有用,
public string GetSalary()
{
CultureInfo inr = new CultureInfo("hi-IN");
return string.Format(inr, "{0:#,#}", TotalSalary);
}
每当我在应用程序中使用任何十进制/整数变量的“ToString”时,它都应该给我印度编号格式的数字
您还可以创建一个新方法作为类型
decimal
和 int
: 的扩展
public static class MyExtensions
{
public static string MyOutput(this decimal number)
{
return number.ToString("#,#.##", new CultureInfo(0x0439));
}
public static string MyOutput(this int number)
{
return number.ToString("#,#", new CultureInfo(0x0439));
}
}
所有文化代码以供进一步参考。
然后您可以在整个程序中将其用于
decimal/int
类型的变量:
public string GetSalary()
{
return TotalSalary.MyOutput();
}
输出:对于
decimal asd = 1000000.23m;
10,00,000.23
GetSalary
的签名会是这样的:
public string GetSalary()
{
return String.Format("{0:n}", TotalSalary);
}
如果您想将小数四舍五入为
"{0:n3}"
位,您可以使用 3
。
以下印度编号系统中的数字格式化方法将精度保持在小数点后两位。
工作示例: https://dotnetfiddle.net/qLotLP
public static string IndiaNumberFormat(string input = null)
{
if (input == null)
{
return string.Empty;
}
return string.Format(new System.Globalization.CultureInfo("en-IN", false), "{0:#,#.##}", Convert.ToDouble(input));
}