2017-01-11 6 views
-1

doubleをlongに切り詰めずにlongに変換するにはどうすればよいですか?例えば切り捨てずにdoubleをlongに変換する

私は-26.3999745は、これまでのところ、私は、そのような番号を切り捨てConvert.ToInt64()として試みてきた方法-263999745

になりたいです。

EDIT:小数点以下の桁数が変化する 、数字の一部は、2つの段階に続いて小数点以下5桁

+0

これは同じ番号ではありませんが、このコンバージョンにはどの基準がありますか? –

+2

例えば100000を掛けるだけです。または、文字列を変換して小数点文字を削除します。 – HimBromBeere

+1

例: 'long.Parse(( - 26.3999745).ToString()。Replace("。 "、" ")) –

答えて

2

あなたは、これはあなたが本当に欲しいものは本当に確信している場合...

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

偶然かもしれませんが、私は同じことを考えていました –

+1

'' "の代わりに' 'String.Empty''を使うのが普通です。 –

+2

@KamilT本当に? ** **このアプローチについては、**あなたを気にするものですか? ''。 ''は文化に依存しない小数点の区切りであるべきではないか、またはすべてが役に立たないということではありませんか? –

3

を有することができます

  1. により、小数点n
  2. 乗算後の番号を取得します

コード:

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

あなたはシングル責任を(あなたがすべき)に従うのが好きなら、あなたはまた、文化固有のものではない第二のアプローチで行くことができます:

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

これはあなたのためのトリックを行う可能性があります

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); 
関連する問題