假设我有double
42.433243,我想将其转换为整数 42433243。
当十进制长度是随机的时,这样做的代码是什么?
更多示例:
45.25 => 4525
125.152254 => 125152254
etc...
假设我有double
42.433243,我想将其转换为整数 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
如果数字太大(例如溢出,对于 int 大于 2^32,或者您可以在第 2 行替换double
并使其更大),这将不起作用。
如果您有其他考虑,请告诉我。
也许这样的事情会奏效。
while ((double_num - Math.floor(double_num)) != 0.0) double_num *= 10;
int num = (int) double_num;
更直接的方法是将数字转换为 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
int result = Convert.ToInt32(Regex.Match(digits.Replace(".","").Replace(",",""), @"^\d+$").Value);