SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1851|回复: 5
打印 上一主题 下一主题

请教round()函数

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-5-25 21:24:53 | 只看该作者

请教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 */

谁能帮帮吗?谢谢啦
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-5-25 23:49:00 | 只看该作者

Re: 请教round()函数

round(x,y)的返回值是在所有y的倍数中与x之差绝对值最小的一个。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-5-26 01:30:59 | 只看该作者

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最接近
说的有点罗嗦哈
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-5-27 21:03:58 | 只看该作者

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 */
上面这几个是第三种情况吗?能否再帮忙解释下,谢谢啦
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2012-5-28 00:12:45 | 只看该作者

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 */
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2012-5-29 21:08:15 | 只看该作者

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: -->
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-6 13:50 , Processed in 0.071979 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表