2014-11-26 2 views
1

두 점의 모든 정수를 점의 오른쪽으로 이동하는 방법은 무엇입니까? 예제 나는 5342를 가지고 있는데, 나는 0.5342를 반환하는 함수를 원한다. 나는 이중의 자릿수를 알지 못한다. 그것은 무작위로 생성된다. 상당히 쉽지만 답변을 찾을 수 없습니다.두 점의 모든 정수를 점의 오른쪽으로 이동하는 방법

+0

'double someNumber = Convert.ToDouble ("0."+ 5321, CultureInfo.InvariantCulture);', ** ** ** :) – Habib

+0

@Habib 네거티브를 처리 할 수 ​​있습니까? –

+0

또는 비 - 정수 ... –

답변

2

이것은 정직하게, 매우 기괴한 작업처럼 들리 겠지만, 당신은 사용할 수 있습니다 입력이 무한대하지만 경우 무한 루프로 이동합니다

while (Math.Abs(value) >= 1) 
{ 
    value = value/10; 
} 

- 당신이 아니라 당신 같은 정보가 유실 될 수 있습니다 계속 나눕니다. 후자의 점이 중요합니다. 실제로 관심있는 것이 10 진수 표현 인 경우 double 대신 decimal을 사용해야합니다.

당신은 잠재적으로 그것을 할 Math.LogMath.Pow의 혼합물을 사용할 수 있지만 위의 내가 시작했던 것과 아마.

0
수가 1보다 작은

public static double SomeMethod(double n) 
{ 
    double d = n; 
    bool isNegative = (d < 0); 
    if(isNegative) 
     d = d * -1; 

    while(d >= 1) 
     d = d/10; 

    if(isNegative) 
     d = d * -1; 

    return d; 
} 

대안 (더 정확한) 옵션이 될 때까지 (10)에 의해

그냥 분할 :

public static double SomeMethod2(double n) 
{ 
    double d = n; 
    bool isNegative = (d < 0); 
    if(isNegative) 
     d = d * -1; 

    int numberOfDigits = ((int)d).ToString().Length; 

    int divisor = 1; 
    for(int i = 0; i < numberOfDigits; i++) 
     divisor = divisor * 10; 

    d = d/divisor; 

    if(isNegative) 
     d = d * -1; 

    return d; 
} 
+0

이렇게하면 나누기 때마다 정밀도가 떨어질 수 있으므로 결과가 반드시 정확하지는 않습니다. 그것은 입력 값의 도메인과 그것들이 정확하게 "이동"될 필요성에 달려 있습니다. – Lukos

+0

@Lukos 더 나은 대체 솔루션으로 업데이트했습니다. –

3
private static void Main(string[] args) 
{ 
    Console.WriteLine(MyFunction(5127)); 
    Console.WriteLine(MyFunction(1)); 
    Console.WriteLine(MyFunction(51283271)); 
    Console.WriteLine(MyFunction(-512)); 
    Console.WriteLine(MyFunction(0)); 
} 

    public static double MyFunction(double myNumber) 
    { 
     return Math.Floor(myNumber)/Math.Pow(10, Math.Abs(myNumber).ToString().Length); 
    } 

Output

+1

.NET 피들; 이제 작동합니다. 고칠 때마다 고마워! (출력을 업데이트하고 싶을 수도 있습니다 ... Heres the fiddle : https://dotnetfiddle.net/7glnL5 – BradleyDotNET

+0

내 솔루션을 고쳐 주셔서 감사합니다. – Veverke

0

이 당신을 얻을 것이다 대부분의 방법 거기

public static string test() 
    { 
     double dub = 5432; 

     string dubTxt = dub.ToString(); 

     string text = "0."; 

     string test = string.Concat(text + dubTxt); 

     if (1 == 1) 
     { 

      MessageBox.Show(test); 
      return test; 

     } 
    } 

음수를 처리하기 위해 더 많은 if 문을 개발해야합니다.

public static string test() 
    { 
     double dub = 5432; 

     string dubTxt = dub.ToString(); 

     string text = "0."; 

     string test = string.Concat(text + dubTxt); 

     if (dub < 0) 
     { 

       //Do this code instead 
     } 
    } 

행운을 빈다. 당신이 그것을 선택하면 나를 부딪쳐주세요! 나는 다른 쓰레기를 할 수 있도록 신용이 필요합니다. :-D