如何获得给定的十进制/精度的下一个十进制

时间:2018-08-28 11:44:26

标签: c# vb.net

我想以编程方式确定某个十进制后的下一个十进制。

例如,我的小数为0.0000041

我想以编程方式在函数中生成0.0000042。

如果在以0.0000042运行该函数后再次运行该函数,则新数字将为0.0000043

如果我运行的函数的小数位数为0.0000049,则新数字将为0.0000050,以此类推。...

有没有办法做到这一点?

我不知道从哪里开始,或者不知道要寻找什么样的参考来做这样的事情。

谢谢。

1 个答案:

答案 0 :(得分:2)

您似乎正在寻找这样的东西: (请检查以下内容是否要手动指定精度)

static decimal GetNextDecimal(decimal input)
{
    int count = BitConverter.GetBytes(decimal.GetBits(input)[3])[2];
    return input + (1m / (decimal)Math.Pow(10, count));
}

用法:

decimal num1 = 0.0000041m;
decimal num2 = 0.00002m;
decimal next = GetNextDecimal(num1);
decimal next2 = GetNextDecimal(num2);
Console.WriteLine(next);
Console.WriteLine(next2);

输出:

0.0000042
0.00003

我使用了this answer的一点帮助来获取小数位数。


如果您最初想手动指定精度,则可以改用以下内容:

static decimal GetNextDecimal(decimal input, int precision)
{
    return input + (1m / (decimal)Math.Pow(10, precision));
}

..它允许您执行以下操作:

decimal num1 = 0.003m;
decimal next = GetNextDecimal(num1, 3);
decimal next2 = GetNextDecimal(num1, 4);
Console.WriteLine(next);
Console.WriteLine(next2);

输出:

0.004
0.0031