假设我有double
42.433243,我想将其转换为整数42433243。
当小数长度是随机的时,这样做的代码是什么?
进一步的例子:
45.25 => 4525
125.152254 => 125152254
etc...
答案 0 :(得分:6)
只要有任何小数部分,您可以将该值乘以10:
Decimal m = 42.433243m;
while (m % 1 != 0) m *= 10;
int i = (int)m;
答案 1 :(得分:2)
又快又脏:
double x = 42.25;
int big = int.Parse(x.ToString().Replace(".",""));
如果数字太大(例如溢出,int大于2 ^ 32,或者你可以在第2行用int
替换double
并且使它更大,这不起作用)。
如果您有其他考虑因素,请告诉我。
答案 2 :(得分:1)
也许这样的事情会起作用。
while ((double_num - Math.floor(double_num)) != 0.0) double_num *= 10;
int num = (int) double_num;
答案 3 :(得分:0)
int result = Convert.ToInt32(Regex.Match(digits.Replace(".","").Replace(",",""), @"^\d+$").Value);
答案 4 :(得分:0)
更直接的方法是将数字转换为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