如何在系统间缓存中舍入除法的结果?

时间:2015-11-18 10:24:25

标签: intersystems-cache

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

感谢。

2 个答案:

答案 0 :(得分:4)

有些函数用于格式化数字,如有必要,它们会将其舍入

$justify(表达式,宽度[,十进制]) - Caché将表达式中的小数位数舍入或填充到此值。

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

$fnumber(i编号的格式,十进制)

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

$number(NUM,格式,最小,最大)

write $number(5/3,3)
1.667

$normalize(NUM,刻度)

w $normalize(5/3,3)
1.667

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

答案 1 :(得分:1)

在标准MUMPS中(缓存对象脚本向后兼容) 有三个“师”相关的运营商。第一个是单个字符“/”(即正斜杠)。这是一个真正的数字鸿沟。 5/2是2.5,10.5 / 5是2.1等。这需要两个数字(每个可能包括一个小数点和一个分数)并返回一个可能带有分数的数字。一个有用的事情要记住,这个数字除法产生的结果尽可能简单。如果在小数点前面有前导零,如0007,则将该数字视为7。 如果小数点后面有尾随零,它们也会被修剪。 因此,2.000被修剪为2(注意没有小数点),00060.0100将被修剪为仅60.01

过去,许多实现者都会保证3/3始终为1(而不是.99999)并且数学运算完全按照可能的方式完成。这不是现在的重点,但过去常常会有特殊的库来处理二进制编码的十进制(BCD),以保证尽可能接近一分钱的分数。

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

最终除法运算符是余数(或“mod”或“modulo”),由单个字符“#”(有时称为散列,井号或octothorpe)表示。为了得到这个的答案,计算整数除法“/”,并且当计算整数除法时剩余的结果将是结果。在我们的23 \ 2示例中,答案是11,剩下的值是1,所以23#2是1 ad 23.3#2.3 is .3你可能会注意到(数字#divisor)+((number \ divisior)* divisor)总是回到原来的数字。

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