私が42.433243を持っていて、double
それを整数42433243に変換したいとしましょう。
小数の長さがランダムな場合にそれを行うためのコードは何ですか?
さらなる例:
45.25 => 4525
125.152254 => 125152254
etc...
私が42.433243を持っていて、double
それを整数42433243に変換したいとしましょう。
小数の長さがランダムな場合にそれを行うためのコードは何ですか?
さらなる例:
45.25 => 4525
125.152254 => 125152254
etc...
小数部がある限り、値に10を掛けることができます。
Decimal m = 42.433243m;
while (m % 1 != 0) m *= 10;
int i = (int)m;
速くて汚い:
double x = 42.25;
int big = int.Parse(x.ToString().Replace(".",""));
数値が大きすぎる場合(たとえば、オーバーフロー、intの場合は2 ^ 32より大きい、または2行目で置き換えint
てはるかにdouble
大きくすることができます)、これは機能しません。
他に考慮事項がある場合はお知らせください。
おそらく、このようなものが機能するでしょう。
while ((double_num - Math.floor(double_num)) != 0.0) double_num *= 10;
int num = (int) double_num;
int result = Convert.ToInt32(Regex.Match(digits.Replace(".","").Replace(",",""), @"^\d+$").Value);
これを行うためのより直接的な方法は、数値をaに変換しdecimal
、ビットを調べることです。
最初の96の最下位ビットは仮数を表し、32の最上位ビットは指数を表します。したがって、関心のある実際の値は32の最下位ビットです。このDecimal.GetBits()
メソッドはビットを配列intとして返すため、必要なのは配列の最初のintを取得することだけです。数がを超えない限りint.MaxValue
、あなたは金色です。
var number = 42.433243;
var asDecimal = (Decimal)number;
var bits = Decimal.GetBits(asDecimal);
var digits = bits[0]; // 42433243