-4

假设我有double42.433243,我想将其转换为整数 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如果数字太大(例如溢出,对于 int 大于 2^32,或者您可以在第 2 行替换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

更直接的方法是将数字转换为 adecimal并检查位。

前 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 回答
0
int result = Convert.ToInt32(Regex.Match(digits.Replace(".","").Replace(",",""), @"^\d+$").Value);
于 2013-01-13T21:24:14.670 回答