SAS中文论坛

标题: 请教round()函数 [打印本页]

作者: shiyiming    时间: 2012-5-25 21:24
标题: 请教round()函数
ROUND (argument <,rounding-unit>)
The ROUND function rounds the first argument to a value that is very close to a multiple of the second argument.
不懂这个multiple是什么。
rounding-unit 是 1 0.1 0.01 等等结果都感觉合理,但是0.2 0.3 等等时候就不懂了
运行下面代码:
round(5.11,0.2);  /* 5.2 */
round(5.22,0.2);  /* 5.2 */
round(5.33,0.2);  /* 5.4 */
round(5.88,0.2);  /* 5.8 */

谁能帮帮吗?谢谢啦
作者: shiyiming    时间: 2012-5-25 23:49
标题: Re: 请教round()函数
round(x,y)的返回值是在所有y的倍数中与x之差绝对值最小的一个。
作者: shiyiming    时间: 2012-5-26 01:30
标题: Re: 请教round()函数
Round函数(先称为舍入函数)有三种情况:
1.当舍入单元(rounding-unit)为整数,或是10的某次幂(大于等于1e-15),或者十进制算法的结果小数位数不超过4位,返回的结果一般是你想要,即是舍入单元的某个离原argument最近的那个倍数,即大多数你觉得合理的情况;
2.而当舍入单元是某个整数的倒数时,则round 函数计算的结果为另外某个整数除以该整数,而不是舍入单元的某个整数倍(这两个概念是不一样的,因为这里有二进制和十进制的问题),如rounding-unit为1/6时,返回结果为某个整数除以6,而不是某个整数乘以rounding-unit;
3.而当舍入单元不是整数,也不是10的某次幂,并且也不是某个整数的倒数,而且十进制算法的结果的小数位数不超过4位,这时round 函数计算的结果为舍入单元乘上某个整数。

round(5.11,0.2); /* 5.2 */
round(5.22,0.2); /* 5.2 */
round(5.33,0.2); /* 5.4 */

这三个为第二种情况,0.2是5的倒数,和5相乘是整数的数,不是5.1,不是5.3,而是5.2和5.4,当然要保证,离argument最接近
说的有点罗嗦哈
作者: shiyiming    时间: 2012-5-27 21:03
标题: Re: 请教round()函数
[quote="johnlxd007":pw7vpj5x]Round函数(先称为舍入函数)有三种情况:
1.当舍入单元(rounding-unit)为整数,或是10的某次幂(大于等于1e-15),或者十进制算法的结果小数位数不超过4位,返回的结果一般是你想要,即是舍入单元的某个离原argument最近的那个倍数,即大多数你觉得合理的情况;
2.而当舍入单元是某个整数的倒数时,则round 函数计算的结果为另外某个整数除以该整数,而不是舍入单元的某个整数倍(这两个概念是不一样的,因为这里有二进制和十进制的问题),如rounding-unit为1/6时,返回结果为某个整数除以6,而不是某个整数乘以rounding-unit;
3.而当舍入单元不是整数,也不是10的某次幂,并且也不是某个整数的倒数,而且十进制算法的结果的小数位数不超过4位,这时round 函数计算的结果为舍入单元乘上某个整数。

round(5.11,0.2); /* 5.2 */
round(5.22,0.2); /* 5.2 */
round(5.33,0.2); /* 5.4 */

这三个为第二种情况,0.2是5的倒数,和5相乘是整数的数,不是5.1,不是5.3,而是5.2和5.4,当然要保证,离argument最接近
说的有点罗嗦哈[/quote:pw7vpj5x]

谢谢你这么详细的解释,我已经理解了第二种情况。
round(5.11,0.3); /* 5.1 */
round(5.33,0.3); /* 5.4 */
round(5.55,0.3); /* 5.7 */
round(5.11,0.4); /* 5.2 */
round(5.44,0.4); /* 5.6 */
上面这几个是第三种情况吗?能否再帮忙解释下,谢谢啦
作者: shiyiming    时间: 2012-5-28 00:12
标题: Re: 请教round()函数
正是第三种情况,不就是round-unit乘上17,18,19,13,14的么
round(5.11,0.3); /* 5.1 */
round(5.33,0.3); /* 5.4 */
round(5.55,0.3); /* 5.7 */
round(5.11,0.4); /* 5.2 */
round(5.44,0.4); /* 5.6 */
作者: shiyiming    时间: 2012-5-29 21:08
标题: Re: 请教round()函数
[quote="johnlxd007":3ulutikh]正是第三种情况,不就是round-unit乘上17,18,19,13,14的么
round(5.11,0.3); /* 5.1 */
round(5.33,0.3); /* 5.4 */
round(5.55,0.3); /* 5.7 */
round(5.11,0.4); /* 5.2 */
round(5.44,0.4); /* 5.6 */[/quote:3ulutikh]

多谢多谢 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2