設立一個特定的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;
}
我懷疑你沒有使用正確的數據類型(十進制)任何你正在努力實現。 –
我會用自定義的IFormatprovider作爲答案寫下這個人,儘管它不是我想要的。 要達林,我在我的最後的例子和小數用雙(3000D)。我最終創建了我自己的方法,發佈如下,因爲我無法想象當前的文化會解析我的需求並廣泛地應對任何問題。 – Charles