math - 四舍五入两次 - 为一条规则

标签 math language-agnostic rounding

我需要将数字四舍五入 1/32,然后四舍五入 1/100。我需要将其转换为一个舍入规则(使用古老的程序......)。我可以乘除原始数字等等,只是不能舍入两次......

有没有办法用数学方法来做到这一点?

谢谢!

kcross

最佳答案

如果您使用的任何东西都允许您定义函数,那么最可读的实现将是这样的:

function round(x, interval){
    //implementation left as an exercise to the reader
}

#rounds x by interval1, then by interval2
function doubleRound(x, interval1, interval2){
    return round(round(x, interval1), interval2)
}

但如果您拥有的只是简单的算术,则可以将所有内容展开到一个语句中。

要将非负数 x 舍入到最接近的 N 区间,可以使用以下公式:

round(x,N) = floor((x + (N/2)) / N) * N

要舍入两次,请将函数嵌套在其自身中:

round(round(x, N1), N2) = floor(((floor((x + (N1/2)) / N1) * N1) + (N2/2)) / N2) * N2

因此要先舍入 1/32,然后舍入 1/100,您可以使用:

floor(((floor((x + ((1/32)/2)) / (1/32)) * (1/32)) + ((1/100)/2)) / (1/100)) * (1/100)

关于math - 四舍五入两次 - 为一条规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432895/

相关文章:

java - 为什么我们需要先将 double 转换为字符串,然后才能将其转换为 BigDecimal?

java - 如何在Android中计算数字的平方

c# - 了解 Java/C# 中的抽象和接口(interface)

language-agnostic - 使用示例解决方案进行编码练习

python - 这种计算并集和交集的编程方法的正式名称

c - 给定 4 个点,其中 2 个在不同的半径上。获取圆心

c# - 在 C# 中需要任意精度算术

C# 将 1.998 舍入为 1.9

c# - 如何使用 NET Math.Round(<decimal>,<int>,MidpointRounding.AwayFromZero) 正确舍入

c - 四舍五入整数除法(而不是截断)