C#文化信息/货币

设立一个特定的toString我希望做一个客户十进制格式。我现在得到的是“(3003.3003d).ToString(#,###。00 ##”)是“3,003.3003”。我试图获得的格式是“3,003.300,3”。C#文化信息/货币

我可以使用客户的方法,math.floor并打破它除了我自己,但我很好奇,如果有使用文化信息做什么,我在寻找一种方式。任何人都知道有办法做到这一点?

写了自定义的IFormatProvider的家伙作为答案的教程很不错,但我不相信当前的文化与我需要的东西存在。这是我的最终答案:

private string ToCustomDecimal(decimal Input, int MaxLenPostDec, int MinLenPostDec) 

{

string CustD;

string[] Split = Input.ToString().Split('.');

string BigNum = Split[0];

string SmallNum = "0";

if (Split.Length > 1)

SmallNum = Split[1];

int Spot = 0;

bool FirstD = false;

string OutBigNum = "";

for (int Locc = BigNum.Length - 1; Locc >= 0; Locc--)

{

Spot++;

if (FirstD == false)

{

OutBigNum = BigNum.Substring(Locc, 1) + OutBigNum;

FirstD = true;

}

else

OutBigNum = (Spot % 3 == 1 ? "'" : "") + BigNum.Substring(Locc, 1) + OutBigNum;

}

Spot = 0;

FirstD = false;

string OutSmallNum = "";

for (int Locc = 0; Locc < SmallNum.Length; Locc++)

{

Spot++;

if (FirstD == false)

{

OutSmallNum += SmallNum.Substring(Locc, 1);

FirstD = true;

}

else

{

OutSmallNum += (Spot % 3 == 1 ? "," : "") + SmallNum.Substring(Locc, 1);

}

if (Locc >= MaxLenPostDec - 1)

break;

if (Locc == SmallNum.Length - 1 && MinLenPostDec > Locc)

{

for (int Locc2 = Locc; Locc2 < MinLenPostDec - 1; Locc2++)

{

Spot++;

OutSmallNum += (Spot % 3 == 1 ? "," : "") + 0;

}

}

}

CustD = OutBigNum + "." + OutSmallNum;

return CustD;

}

回答:

你应该寻找到超载ToString("#,###.00##", myFormatProvider)

所以你需要一个custom IFormatprovider。

回答:

这看起来好像会起作用,但我没有测试它。

(3003.3003d).ToString(@"#\'###.00#\,##") 

回答:

看一看Decimal.ToString超载与IFromatProvider。我想你要么用特定的(CultureInfo.CreateSpecificCulture())或当前的文化(CultureInfo.CurrentCulture)向用户显示货币。

以上是 C#文化信息/货币 的全部内容, 来源链接: utcz.com/qa/260072.html

回到顶部