c#的双精度为整型

本文关键字:整型 双精度 | 更新日期: 2023-09-27 17:52:58

假设我有double 42.433243,我想把它转换成整数42433243。

当十进制长度是随机的时,执行该操作的代码是什么?

进一步例子:

45.25 => 4525
125.152254 => 125152254
etc...

c#的双精度为整型

只要有分数部分,可以将值乘以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