-4

私が42.433243を持っていて、doubleそれを整数42433243に変換したいとしましょう。

小数の長さがランダムな場合にそれを行うためのコードは何ですか?

さらなる例:

45.25 => 4525

125.152254 => 125152254

etc...
4

5 に答える 5

6

小数部がある限り、値に10を掛けることができます。

Decimal m = 42.433243m;

while (m % 1 != 0) m *= 10;
int i = (int)m;
于 2013-01-13T21:23:40.740 に答える
2

速くて汚い:

double x = 42.25;
int big = int.Parse(x.ToString().Replace(".",""));

数値が大きすぎる場合(たとえば、オーバーフロー、intの場合は2 ^ 32より大きい、または2行目で置き換えintてはるかにdouble大きくすることができます)、これは機能しません。

他に考慮事項がある場合はお知らせください。

于 2013-01-13T21:22:16.407 に答える
1

おそらく、このようなものが機能するでしょう。

while ((double_num - Math.floor(double_num)) != 0.0) double_num *= 10;
int num = (int) double_num;
于 2013-01-13T21:25:52.850 に答える
0
int result = Convert.ToInt32(Regex.Match(digits.Replace(".","").Replace(",",""), @"^\d+$").Value);
于 2013-01-13T21:24:14.670 に答える
0

これを行うためのより直接的な方法は、数値を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
于 2013-01-13T22:33:32.923 に答える