[c#] double에서 소수 부분 가져 오기

소수점 이하의 숫자를 정수 형태로 받고 싶습니다. 예를 들어, 1.05에서 05 만 또는 0.50이 아닌 2.50에서 50 만



답변

업데이트 된 답변

여기에서는 동일한 방법으로 3 가지 접근 방식을 제공합니다.

[1] Math.Truncate를 이용한 수학 솔루션

 var float_number = 12.345;
 var result = float_number - Math.Truncate(float_number);

// 입력 : 1.05
// 출력 : “0.050000000000000044”

// 입력 : 10.2
// 출력 : 0.19999999999999929

이것이 예상 한 결과가 아니라면 결과를 원하는 형식으로 변경해야합니다 (하지만 일부 문자열 조작을 다시 수행 할 수 있음).

[2] 승수 사용 [10의 N 제곱 (예 : 10² 또는 10³) 여기서 N은 소수 자릿수입니다.]

       // multiplier is " 10 to the power of 'N'" where 'N' is the number 
       // of decimal places
       int multiplier = 1000;
       double double_value = 12.345;
       int double_result = (int)((double_value - (int)double_value) * multiplier);

// 출력 345

소수점 이하 자릿수가 고정되지 않은 경우이 방법은 문제를 일으킬 수 있습니다.

[3] “정규식 (REGEX)”사용

문자열로 솔루션을 작성할 때 매우주의해야합니다. 이것은 일부 경우를 제외하고는 바람직하지 않습니다 .

소수 자릿수로 문자열 연산 을 수행 하려는 경우 이것이 바람직합니다.

    string input_decimal_number = "1.50";
    var regex = new System.Text.RegularExpressions.Regex("(?<=[\\.])[0-9]+");
    if (regex.IsMatch(input_decimal_number))
    {
        string decimal_places = regex.Match(input_decimal_number).Value;
    }

// 입력 : “1.05”
// 출력 : “05”

// 입력 : “2.50”
// 출력 : “50”

// 입력 : “0.0550”
// 출력 : “0550”

Regex에 대한 자세한 내용은 http://www.regexr.com/ 에서 찾을 수 있습니다 .


답변

가장 좋은 방법은 다음과 같습니다.

var floatNumber = 12.5523;

var x = floatNumber - Math.Truncate(floatNumber);

원하는대로 변환 할 수있는 결과


답변

var decPlaces = (int)(((decimal)number % 1) * 100);

이것은 당신의 숫자가 소수점 두 자리 만 가지고 있다고 가정합니다.


답변

‘Math.Truncate’접근 방식보다 더 깨끗하고 빠른 솔루션이 있습니다.

double frac = value % 1;


답변

반올림 문제가없는 솔루션 :

double number = 10.20;
var first2DecimalPlaces = (int)(((decimal)number % 1) * 100);
Console.Write("{0:00}", first2DecimalPlaces);

출력 : 20

십진수로 캐스트하지 않으면 19.

또한:

  • 318.40출력 : 40(대신 39)
  • 47.612345출력 : 61(대신 612345)
  • 3.01출력 : 01(대신 1)

금융 번호로 작업하는 경우 (예 :이 경우 거래 금액 의 센트 부분 을 얻으려는 경우 ) 항상 decimal데이터 유형을 사용하십시오 .

최신 정보:

다음은 문자열로 처리하는 경우에도 작동합니다 (@SearchForKnowledge의 답변을 기반으로 함).

10.2d.ToString("0.00", CultureInfo.InvariantCulture).Split('.')[1]

그런 다음을 사용 Int32.Parse하여 int로 변환 할 수 있습니다 .


답변

더 좋은 방법 –

        double value = 10.567;
        int result = (int)((value - (int)value) * 100);
        Console.WriteLine(result);

출력-

56


답변

가장 간단한 변형은 아마도 Math.truncate ()입니다.

double value = 1.761
double decPart = value - Math.truncate(value)