gpt4 book ai didi

c# - 在 C# 中舍入 double 值

转载 作者:IT王子 更新时间:2023-10-29 04:11:02 26 4
gpt4 key购买 nike

我想要在 C# 中对 double 值进行舍入的方法。它需要能够将 double 值舍入为任何舍入精度值。我手头的代码如下:

public static double RoundI(double number, double roundingInterval) {

if (roundingInterval == 0.0)
{
return;
}

double intv = Math.Abs(roundingInterval);
double sign = Math.Sign(number);
double val = Math.Abs(number);

double valIntvRatio = val / intv;
double k = Math.Floor(valIntvRatio);
double m = valIntvRatio - k;

bool mGreaterThanMidPoint = ((m - 0.5) >= 1e-14) ? true : false;
bool mInMidpoint = (Math.Abs(m - 0.5) < 1e-14) ? true : false;
return (mGreaterThanMidPoint || mInMidpoint) ? sign * ((k + 1) * intv) : sign * (k * intv);
}

所以 RoundI(100, 3) 应该给出 99 而 RoundI(1.2345, 0.001) 应该给出 1.235。

问题是,RoundI(1.275, 0.01) 返回 1.27,而不是 1.28。这是因为在执行double valIntvRatio = val/intv时,即double valIntvRatio = 1.275/0.01,给出0.12749999999999。我知道这是任何编程语言中双重表示的问题。我的问题是,是否有标准代码可以做这样的事情,而无需担心 double ?在这里,我将容差设置为 1e-14,但这对于这个问题来说太过严格,我不知道要设置的正确容差是多少。感谢您的帮助。

最佳答案

Kibbee 指出的使用decimal 的例子

double d = 1.275;
Math.Round(d, 2); // 1.27
Math.Round((decimal)d, 2); // 1.28

关于c# - 在 C# 中舍入 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com