首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arc4random float?

Arc4random float?
EN

Stack Overflow用户
提问于 2011-06-01 05:59:39
回答 4查看 7.4K关注 0票数 9

执行此操作:

代码语言:javascript
复制
float x = arc4random() % 100;

返回介于0和100之间的数字的适当结果。

但是这样做:

代码语言:javascript
复制
float x = (arc4random() % 100)/100;

返回0。我怎样才能让它返回一个浮点值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-01 06:03:58

简单地说,您正在进行整数除法,而不是浮点除法,因此您只会得到一个截断的结果(例如,.123被截断为0 )。试一试

代码语言:javascript
复制
float x = (arc4random() % 100)/100.0f;
票数 24
EN

Stack Overflow用户

发布于 2011-06-01 06:04:54

你用一个int除以一个int,得到一个int。您需要将任一项强制转换为浮点数:

代码语言:javascript
复制
float x = (arc4random() % 100)/(float)100;

另请参阅我对模运算符的评论。

票数 5
EN

Stack Overflow用户

发布于 2016-01-13 19:20:25

要获得浮点除法而不是整数除法,请执行以下操作:

代码语言:javascript
复制
float x = arc4random() % 100 / 100.f;

但是要小心,使用% 100只能得到0到99之间的值,所以除以100.f只能得到0.00f到0.99f之间的随机值。

更好的方法是获得一个介于0和1之间的随机浮点数:

代码语言:javascript
复制
float x = arc4random() % 101 / 100.f;

更好的是,为了避免模数偏差:

代码语言:javascript
复制
float x = arc4random_uniform(101) / 100.f;

或者,为了避免两位数的精度偏差:

代码语言:javascript
复制
float x = (float)arc4random() / UINT32_MAX;

在Swift 4.2+中,您可以获得对范围的内置支持:

代码语言:javascript
复制
let x = Float.random(in: 0.0...1.0)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6194062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档