c#的双精度为整型
本文关键字:整型 双精度 | 更新日期: 2023-09-27 17:52:58
假设我有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(".",""));
如果数字太大(例如overflow,对于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);
更直接的方法是将数字转换为decimal
并检查位。
前96位最低有效位代表尾数,32位最高有效位代表指数。所以你感兴趣的实际值是32位最低有效位。Decimal.GetBits()
方法将比特作为数组整型返回,因此您需要做的就是获取数组中的第一个整型。只要数字不超过int.MaxValue
,你就是黄金。
var number = 42.433243;
var asDecimal = (Decimal)number;
var bits = Decimal.GetBits(asDecimal);
var digits = bits[0]; // 42433243