如何舍入系统间缓存中的划分结果?

How to round the result of a division in intersystems cache?

在系统间缓存中舍入除法结果的最佳方法是什么?

谢谢。

有一些函数,用于格式化数字,必要时还会对其进行四舍五入

$justify(expression,width[decimal]) - Caché 将表达式中的小数位数四舍五入或填充到该值。

write $justify(5/3,0,3)
1.667

$fnumber(数字,格式,小数)

write $fnumber(5/3,"",3)
1.667

$number(数量,格式,最小值,最大值)

write $number(5/3,3)
1.667

$normalize(数量,比例)

w $normalize(5/3,3)
1.667

您可以选择其中更适合您的。他们做了不同的事情,但结果可能是一样的。

在标准 MUMPS 中(缓存对象脚本向后兼容) 有 3 个 "division" 相关运算符。第一个是单个字符“/”(即正斜杠)。这是实数鸿沟。 5/2 是 2.5,10.5/5 是 2.1,等等。这需要两个数字(每个数字可能包括一个小数点和一个分数)和 returns 一个可能带有分数的数字。需要记住的一件有用的事情是,这个数字除法产生的结果尽可能简单。如果小数点前有前导零,如 0007,它将把数字视为 7。 如果小数点后有尾随零,它们也将被修剪。 所以 2.000 被修剪为 2(注意没有小数点)并且 00060.0100 将被修剪为 60.01

过去,许多实现者会保证 3/3 始终为 1(而不是 .99999),并且尽可能准确地完成数学运算。现在这不是重点,但过去有专门的库来处理二进制编码的十进制 (BCD),以尽可能保证永远不会生成一分钱的分数。

下一个除法运算符是单个字符“\”(即反斜杠)。 这个运算符被一些人称为整数除法或 "div"。它会 进行除法并丢弃任何剩余部分。有趣的是,它总是会产生一个整数,但输入不一定是整数。所以 10 是 5,但是 23.3 是 10,所以 23.3.33 也是,如果还有小数剩余,它就会被丢弃。所以 23.3.3 也是 10。全除运算符会给你很多分数。 23.3/2.3 是 10.130434 等等

最后的除法运算符是余数(或 "mod" 或 "modulo"),由单个字符“#”(有时称为井号、井号或 octothorpe)表示。这道题的答案是计算整数除法“/”,计算整数除法时剩下的就是结果。在我们的 23 示例中,答案为 11,剩余值为 1,因此 23#2 为 1 广告 23.3#2.3 是 .3 您可能会注意到 (number#divisor)+((number\divisior)*divisor) 总是会返回原来的数字。

希望这可以帮助您在编程中明确这个想法。