Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟数学.C中GnuMP库的圆形_C#_Rounding - Fatal编程技术网

C# 模拟数学.C中GnuMP库的圆形

C# 模拟数学.C中GnuMP库的圆形,c#,rounding,C#,Rounding,我自己下载了GnuMP库:它在幕后使用gmp.dll,这是它的包装 它具有Real类型,用于高精度计算。在另一个项目中,我有double和decimal类型,我想用Real替换它们 我需要在gnump.net中将Math.Round替换为针对实际类型的自定义Round。除了Gnump之外,有没有人尝试过实现回合。今天我找到了一个数学上正确的答案: public static Real Round(Real r, int precision) { Real scaled = Real.P

我自己下载了GnuMP库:它在幕后使用gmp.dll,这是它的包装

它具有Real类型,用于高精度计算。在另一个项目中,我有double和decimal类型,我想用Real替换它们


我需要在gnump.net中将Math.Round替换为针对实际类型的自定义Round。除了Gnump之外,有没有人尝试过实现回合。

今天我找到了一个数学上正确的答案:

public static Real Round(Real r, int precision)
{
     Real scaled = Real.Pow(10, precision + 1);
     Real multiplied = r*scaled;
     Real truncated = Trunc(multiplied);
     Real lastNumber = truncated -  Trunc(truncated/10)*10;

     if (lastNumber >= 5)
        {
             truncated += 10;
        }
        truncated = Trunc(truncated/10);
        return truncated * 10 /(scaled);
}
当我说“数学上正确”时,我指的是以下代码:

 Real r = 2.5;
 r = Real.Round(r, 0);

我给你3英镑。根据数学。舍入法甚至可以被称为银行家舍入法,但我的任务需要数学舍入法。

您是否尝试过通过下限、特鲁克和/或上限来实现它?如果没有,就去吧。如果是,请告诉我们您有什么问题。是的,我试过了。但对于GnuMP提供的Floor、Trunc和/或天花板没有作为输入参数的精度。我需要实现Math.RoundReal r,int精度。基本地板、Trunc和天花板不将精度作为第二个参数。您是否可以包括您已经拥有的RoundReal r实现,并在问题中指定您希望能够指定精度和任何其他要求?这将使这个问题成为一个好问题,而且我知道如何回答。正确,默认数学。四舍五入到最接近的偶数,但有一些选项可以传递给产生其他结果