2017-01-11 4 views
-1

Wie konvertiert man ein Double in ein Long ohne es zu kürzen?Convert double in long ohne abgeschnitten

Zum Beispiel

Ich möchte -26,3999745 die Methoden -263999745

So weit werde ich wie Convert.ToInt64() die Zahl gestutzt versucht haben.

EDIT: Die Anzahl der Dezimalstellen variiert, 5 Plätze dezimal einige der Zahlen haben

+0

Es ist nicht die gleiche Nummer, Welche Kriterien haben Sie für diese Konvertierung? –

+2

Multiplizieren Sie einfach mit 100000 zum Beispiel. Oder konvertiere so eine Zeichenkette und entferne das Dezimalzeichen. – HimBromBeere

+1

Beispiel: 'long.Parse ((- 26.3999745) .ToString(). Replace (". "," "))' –

Antwort

2

Wenn Sie wirklich sicher sind, das ist, was Sie wirklich .. wollen

long.Parse((-26.3999745).ToString().Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToString(), string.Empty))) 
+0

Könnte Zufall sein, aber ich dachte das gleiche –

+1

Es ist normalerweise besser, 'String.Empty' statt' '' ' –

+2

@KamilT Wirklich zu verwenden? ** Das stört Sie bei diesem Ansatz? Nicht dass das '". "' Ein kulturunabhängiges Dezimaltrennzeichen sein sollte oder dass das Ganze nutzlos ist? –

3

folgenden 2 Schritte

  1. Holen Sie sich die Zahlen nach dem Komma n
  2. Multiplizieren von 10^n

Code:

double number = -26.3999745; 
int n = BitConverter.GetBytes(decimal.GetBits((decimal)number)[3])[2]; 
long result = (long)(number * Math.Pow(10, n)); 

Wenn Sie Einzel Verantwortung gerne folgen (sollten), dann können Sie mit einem zweiten Ansatz gehen die auch nicht kulturspezifisch ist:

static int GetCountAfterDecimal(double number) 
{ 
    int count = 0; 

    string seperator = System.Globalization.CultureInfo.CurrentCulture 
              .NumberFormat.NumberDecimalSeparator; 

    string numberAsString = number.ToString(); 
    int indexOfSeperator = numberAsString.IndexOf(seperator); 

    if (indexOfSeperator >= 0) 
     count = numberAsString.Length - indexOfSeperator - 1; 

    return count; 
} 

static long RemoveDecimalPoint(double number, int numbersCountAfterDecimal) 
{ 
    return (long)(number * Math.Pow(10, numbersCountAfterDecimal)); 
} 

static void Main(string[] args) 
{ 
    double number = -26.3999745; 
    long result = RemoveDecimalPoint(number, GetCountAfterDecimal(number)); 
    Console.WriteLine(result); 
} 
0

Dies könnte den Trick für Sie tun

double YourNumber = -26.3999745; 
int DecimalPlacesCount = BitConverter.GetBytes(decimal.GetBits(Convert.ToDecimal(YourNumber))[3])[2]; 
long number = Convert.ToInt64("1".PadRight(DecimalPlacesCount + 1, '0')); 
long kajs = (long) (YourNumber * number);