현재 .ToString()
으로 소수점 값을 표시할 때는 소수점 이하 15자리까지 표시하는 것이 정확하며, 달러와 센트를 표현하는 데 사용하므로 소수점 이하 2자리까지만 출력하기를 원합니다.
이를 위해 .ToString()
의 변형을 사용해야 하나요?
decimalVar.ToString("F");
이렇게 하면:
통화 및 디스플레이하여 이상적임 금액을.
대한 설명서 ToString (" F";): # 포르마스트링 http://msdn.microsoft.com/en-us/library/dwhawy9k% 28v 110%29.aspx (덕분에 함께 존 슈나이더구요) = vs.
표시용으로만 필요한 경우 string.Format을 사용하십시오.
String.Format("{0:0.00}", 123.4567m); // "123.46"
http://www.csharp-examples.net/string-format-double/
'm'은 소수점 접미사입니다. 소수점 접미사에 대해 알아보세요:
이 때, 소수 d = 12.345 표현식에서는 d.토스트링 (C" ";) 또는 스테링스포르마 (,}, {0 c " ", d) 단, 현재 수익률이 - $12.35 culture& # 39 의 설정 등 통화 기호를 사용할 수 있습니다.
참고로 [" C";] (http://msdn.microsoft.com/en-us/library/dwhawy9k% 28v = vs. 110%29.aspx # 스포르마스트링) 는 현행 자릿수를 있다. 넌 언제나 필요한 기본 'C' like '} {precisiontm 지정자와 오버라이드합니다 강제로 정밀도의 스테링스포르마 (,}, {0 c2 " ", 5.123d)'.
예를 들어 다음과 같은 예상치 못한 수 있습니다.
Decimal.Parse("25").ToString() => "25"
Decimal.Parse("25.").ToString() => "25"
Decimal.Parse("25.0").ToString() => "25.0"
Decimal.Parse("25.0000").ToString() => "25.0000"
25m.ToString() => "25"
25.000m.ToString() => "25.000"
동일한 작업을 하고 있는 '더블' ('" 25";') 의 소수점 이니요를 부여하느뇨 위의 각.
필요할 때 소수점 약 95% s 2 로 소수점 있다 # 39 의 it& it& 가능성이 있기 때문에, 이 경우 과태료를 통화화 # 39 이것은 아마도 95% 의 시간:
Decimal.Parse("25.0").ToString("c") => "$25.00"
Xaml = {c} '또는' 가격, 스테링포르마 바인딩하면 방금 사용
내가 어디서 실행했음 1 건) 로 보낼 때 필요한 것은 소수 소수로 amazon& # 39 의 xml webservice. 이 때문에 불만을 소수점 값 (원래 SQL Server 에서) 는 서비스 개시 ',' 로 전송되는 25.1200 거부됩니다 ('25.12' 가 걱정했던것 형식).
I do) 는 데 필요한 모든 데키마라자로런드 (.) '와' 소수점 두 이 문제를 해결하십시오.
// This is an XML message - with generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
그래서 '형식은' 소수 ',' 메리 페드발루 couldn& # 39 라운드 't just do it 및 유지하는 데 필요한 ToString (" N2";)' 과 이를 '소수'.
다음은 링크파드 프로그램 표시하십시오 조금 다른 형식:
void Main()
{
FormatDecimal(2345.94742M);
FormatDecimal(43M);
FormatDecimal(0M);
FormatDecimal(0.007M);
}
public void FormatDecimal(decimal val)
{
Console.WriteLine("ToString: {0}", val);
Console.WriteLine("c: {0:c}", val);
Console.WriteLine("0.00: {0:0.00}", val);
Console.WriteLine("0.##: {0:0.##}", val);
Console.WriteLine("===================");
}
결과가 나타납니다.
ToString: 2345.94742
c: $2,345.95
0.00: 2345.95
0.##: 2345.95
===================
ToString: 43
c: $43.00
0.00: 43.00
0.##: 43
===================
ToString: 0
c: $0.00
0.00: 0.00
0.##: 0
===================
ToString: 0.007
c: $0.01
0.00: 0.01
0.##: 0.01
===================
매우 드물게 투석실에다가 로렌아줌마가 경우 빈 문자열을 값은 0 입니다.
decimal test = 5.00;
test.ToString("0.00"); //"5.00"
decimal? test2 = 5.05;
test2.ToString("0.00"); //"5.05"
decimal? test3 = 0;
test3.ToString("0.00"); //"0.00"
그 답을 찾을 수 있습니다 잘못된 계시한하나님께 낭비됩니다 people& (대부분) 이 최고 평점 10 분, s # 39 시간입니다.
이 중 어느 한 정확히 내가 필요한 것으로 '0.005 및 강제로 2 라운드 d.p. > -; 0.01 '
이로 인해 2 d.퍼 单捞磐啊 precisiontm 2 로 d.퍼 있다. 우리는 d.퍼 하려면 적어도 2
다음 2 개 이상의 d.퍼 둥글리기 보장할 수 없다
Math.Round(exactResult * 1.00m, 2, MidpointRounding.AwayFromZero)
6.665m.ToString() -> "6.67"
6.6m.ToString() -> "6.60"
그러나 실제로 변경할 경우, you need to write something precision 에 저장된 실제값 다음과 같습니다.
public static class PrecisionHelper
{
public static decimal TwoDecimalPlaces(this decimal value)
{
// These first lines eliminate all digits past two places.
var timesHundred = (int) (value * 100);
var removeZeroes = timesHundred / 100m;
// In this implementation, I don't want to alter the underlying
// value. As such, if it needs greater precision to stay unaltered,
// I return it.
if (removeZeroes != value)
return value;
// Addition and subtraction can reliably change precision.
// For two decimal values A and B, (A + B) will have at least as
// many digits past the decimal point as A or B.
return removeZeroes + 0.01m - 0.01m;
}
}
예를 들어, 단위 테스트:
[Test]
public void PrecisionExampleUnitTest()
{
decimal a = 500m;
decimal b = 99.99m;
decimal c = 123.4m;
decimal d = 10101.1000000m;
decimal e = 908.7650m
Assert.That(a.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("500.00"));
Assert.That(b.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("99.99"));
Assert.That(c.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("123.40"));
Assert.That(d.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("10101.10"));
// In this particular implementation, values that can't be expressed in
// two decimal places are unaltered, so this remains as-is.
Assert.That(e.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("908.7650"));
}
이스터 맥그로바이제이션 숫자를 포맷하십시오 필요한 형식을 사용할 수 있습니다.
system.globalization.cultureinfo ci = new system.globalization.cultureinfo("en-ca");
필요한 경우 '와' decimal d = 1.2300000 트림하려면 소수점 두 redhat. 그런 것이 이렇게 인쇄할 수 있는 'F2 는 문자열 (", F2", ci),' d.토스트링 포맷 중 2 로 소수점 및 ci 는 로켈을 또는 쿠르투라인포.
이 링크를 클릭하면 자세한 정보 확인 http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
[마이크 M. & # 39 의 오토메이티드] (https://stackoverflow.com/a/5724542) 는 위한 완벽한 날 '' t have a # 39, .NET, 하지만 .NET 핵심 doesn& 데키마라자로런드 당시 방법을 쓰기 시작했다.
Net 에서는 코어, 내가 사용해야 했습니다.
decimal roundedValue = Math.Round(rawNumber, 2, MidpointRounding.AwayFromZero);
해키 문자열로 변환한 등, 한 방법 입니다.
public string FormatTo2Dp(decimal myNumber)
{
// Use schoolboy rounding, not bankers.
myNumber = Math.Round(myNumber, 2, MidpointRounding.AwayFromZero);
return string.Format("{0:0.00}", myNumber);
}
https://msdn.microsoft.com/en-us/library/dwhawy9k% 110%29.aspx 28v = vs.
이 링크를 통해 문제를 처리할 수 있는 방법을 자세히 설명합니다 및 확인하시겠습니까 경우 더 많은 일을 할 수 있습니다. 단순하게 목적으로 그리웠댔지 해야 할 것은
double whateverYouWantToChange = whateverYouWantToChange.ToString("F2");
스케쳐내 통화화 대해 이 쉽게 할 수 있습니다 입력하여 C2" "; 대신 F2" ";