표시할 통화 형식
국가에 맞는 올바른 통화 표시 형식을 지정할 수 있는 방법이 있습니까?
예: 영국 - £127.54 네덜란드 €127,54 - 미국 $127.54
등등..
고려해야 할 것들이 있습니다.
통화 기호
통화 기호 배치 - 숫자 앞이나 뒤에 배치할 수 있습니다.
마이너스 금액 표시
통화 형식 지정자("C")를 사용해 보십시오.현재 UI 문화를 자동으로 고려하고 그에 따라 통화 값을 표시합니다.
또는 과부하 상태에서 사용할 수 있습니다.ToString
숫자 형식의 메서드입니다.
예:
decimal value = 12345.6789M; // Be sure to use Decimal for money values. Do not use IEEE-754 types such as float (System.Single) and double (System.Double) as they can only store approximate values.
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
// $12,345.68
// $12,345.679
// kr 12.345,679
이러한 기능이 기본으로 제공됩니다.
십진수를 사용할 때는 형식 문자열 "C" 또는 "c"를 사용할 수 있습니다.
decimal dec = 123.00M;
string uk = dec.ToString("C", new CultureInfo("en-GB")); // uk holds "£123.00"
string us = dec.ToString("C", new CultureInfo("en-US")); // us holds "$123.00"
사용할 수 있습니다.string.Format("{0:c}", value)
.
참고 항목:
지정된 숫자를 사용하여 표시하는 문제입니다.ToString("C", culture)는 주어진 문화의 기본 통화로 효과적으로 금액을 변경하는 것입니다.만약 당신이 그 금액의 ISO 통화 코드를 가지고 있고, 그것을 특정 문화에 대해 표시하고 싶다면, 저는 아래와 같은 소수 확장 방법을 만드는 것을 추천합니다.이것은 자동으로 통화가 문화의 기본 통화로 가정하지 않습니다.
public static string ToFormattedCurrencyString(
this decimal currencyAmount,
string isoCurrencyCode,
CultureInfo userCulture)
{
var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol;
if (userCurrencyCode == isoCurrencyCode)
{
return currencyAmount.ToString("C", userCulture);
}
return string.Format(
"{0} {1}",
isoCurrencyCode,
currencyAmount.ToString("N2", userCulture));
}
이렇게 하면 현지 통화 기호 또는 ISO 통화 코드를 금액과 함께 사용할 수 있습니다. 둘 중 더 적절한 것을 사용됩니다.이 블로그 게시물의 주제에 대한 자세한 내용.
이 코드는 통화를 GB(영국/영국/영국/£)로 설정한 다음 라인을 인쇄합니다.그런 다음 통화를 US/$로 설정하고 라인을 인쇄합니다.)
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false);
Console.WriteLine("bbbbbbb {0:c}",4321.2);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false);
Console.WriteLine("bbbbbbb {0:c}",4321.2);
표시됩니다.
bbbbbbb £4,321.20
bbbbbbb $4,321.20
문화 이름 목록(예: en-Gben-US e.t.c.)
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx
통화 기호와 소수 자릿수만 있으면 기호/금액 순서, 구분 기호 등을 존중하는 다음 도우미 기능을 사용할 수 있으며, 통화 기호 자체와 표시할 소수 자릿수만 변경할 수 있습니다.
public static string FormatCurrency(string currencySymbol, Decimal currency, int decPlaces)
{
NumberFormatInfo localFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
localFormat.CurrencySymbol = currencySymbol;
localFormat.CurrencyDecimalDigits = decPlaces;
return currency.ToString("c", localFormat);
}
예를 들어 어떤 문화나 통화와 독립적으로 특정 형식을 사용하고자 할 때 문화적 접근 방식을 전혀 사용할 수 없는 경우가 있을 수 있습니다.@jackjgordon의 접근법조차 신뢰할 수 없습니다. 일부 문화는 통화 형식과 다른 숫자 형식을 가지고 있기 때문에 이것은 일관성이 없습니다.
여기에 문화 없이 작동하는 수동 포맷터가 있으므로 숫자를 독립적으로 포맷할 수 있습니다.
public static class CustomNumberFormatExtensions
{
static readonly StringBuilder formatTextBuilder = new StringBuilder();
public static string ToCustomFormattedString(this decimal d, int decimalPrecision, string decimalPoint, string groupSeperator = "", int groupLength = 3, MidpointRounding rounding = MidpointRounding.AwayFromZero)
{
lock (formatTextBuilder)
{
formatTextBuilder.Clear();
string rawDigits = Math.Round(d * (decimal)Math.Pow(10, decimalPrecision), 0, rounding).ToString();
rawDigits = rawDigits.PadLeft(decimalPrecision + 1, '0');
if (decimalPrecision > 0)
{
formatTextBuilder.Insert(0, rawDigits.Substring(rawDigits.Length - decimalPrecision));
rawDigits = rawDigits.Substring(0, rawDigits.Length - decimalPrecision);
formatTextBuilder.Insert(0, decimalPoint);
}
while (rawDigits.Length > groupLength)
{
formatTextBuilder.Insert(0, rawDigits.Substring(rawDigits.Length - groupLength));
rawDigits = rawDigits.Substring(0, rawDigits.Length - groupLength);
formatTextBuilder.Insert(0, groupSeperator);
}
return rawDigits + formatTextBuilder.ToString();
}
}
public static string ToCustomFormattedString(this double d, int decimalPrecision, string decimalSeperator, string groupSeperator = "", int groupLength = 3, MidpointRounding rounding = MidpointRounding.AwayFromZero)
{
return ((decimal)d).ToCustomFormattedString(decimalPrecision, decimalSeperator, groupSeperator, groupLength, rounding);
}
}
public static string ToFormattedCurrencyString(
this decimal currencyAmount,
string isoCurrencyCode,
CultureInfo userCulture)
{
var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol;
if (userCurrencyCode == isoCurrencyCode)
{
return currencyAmount.ToString("C", userCulture);
}
return string.Format(
"{0} {1}",
isoCurrencyCode,
currencyAmount.ToString("N2", userCulture));
}
언급URL : https://stackoverflow.com/questions/4842332/currency-format-for-display
'programing' 카테고리의 다른 글
상대 가상 경로 "는 여기서 허용되지 않습니다. (0) | 2023.07.05 |
---|---|
유형 스크립트 반응에서 구성 요소의 하위 항목을 반복하는 방법은 무엇입니까? (0) | 2023.07.05 |
스웨거 2 문제 - 스프링 부트 (0) | 2023.07.05 |
Mongodb로 퍼지 검색? (0) | 2023.07.05 |
https로 보호되는 웹 사이트를 만드는 방법 (0) | 2023.07.05 |