首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对双精度数的小数部分进行随机化

问对双精度数的小数部分进行随机化
EN

Stack Overflow用户
提问于 2015-11-14 04:02:02
回答 4查看 55关注 0票数 1

我有以下方法,它接受GPS坐标作为字符串,并将它们转换为最多6个小数点的双精度。现在我尝试从第一个小数点开始对小数点进行随机化。

代码语言:javascript
复制
public void randomizeCoordinate(String latString, String lonString)
{
    double lat = Double.parseDouble(latString);
    double lon = Double.parseDouble(lonString);

    DecimalFormat df = new DecimalFormat("#.######");
    df.setRoundingMode(RoundingMode.HALF_EVEN);
    for (Number n : Arrays.asList(lat, lon))
    {
        Double d = n.doubleValue();
        System.out.println(df.format(d));
    }
}

例如,如果我有2.34,我希望随机化后的值类似于2.493473、2.294847或2.346758

第一个小数点(在本例中是2.34中的3)最多只能更改一个数字。随机向上或向下。前导小数点可以随机更改为任何小数点。

做这件事的最好方法是什么?

EN

回答 4

Stack Overflow用户

发布于 2015-11-14 04:11:44

代码语言:javascript
复制
Random rand = new Random();
double x = ...;

x = ((int)(x*10) + rand.nextDouble()*2 - 1)/10.0;

乘以10并截断以获得包括第一个小数的数字,添加一个介于-1和1之间的随机数,缩小。

请注意,您的双精度数不会只有6位十进制数字;这些数字不是十进制数。对于显示6个小数的输出,您需要使用需要6个十进制数字的格式来格式化数字。

票数 1
EN

Stack Overflow用户

发布于 2015-11-14 04:12:43

您可以找到一个介于-100,000和100,000之间的随机数,将其除以1,000,000,然后将其与原始数字相加。

它将有效地使您的数字高达+0.1或-0.1不同,但在理论上可能返回0,这将导致相同的数字。

票数 0
EN

Stack Overflow用户

发布于 2015-11-14 04:16:39

使用Math.random()或java.util.Random的子类...

代码语言:javascript
复制
 d += 0.1 * (Math.random() * 2 - 1);

对于您的示例,这将为您提供从2.24到2.44的范围。

如果你真的想要一个从2.20到2.39999999的范围,请参阅@laune的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33700868

复制
相关文章

相似问题

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