java - Java中的小数范围类

标签 java range decimal

我想要一个提供十进制值范围的类。

由于 float 的规范,返回的范围对象没有准确的值。

要获得更精确的结果,如 python 的 numpy.arange(0.6,0.7,0.01) 返回的 [0.60,0.61,0.62...0.69]

我的代码如下所示。

// Java range
public class range{

    private double start;
    private double end;
    private double step;

    public range(double start,double end, double step) {
        this.start = start;
        this.end = end;
        this.step = step;
    }

    public List<Double> asList(){
        List<Double> ret = new ArrayList<Double>();
        for(double i = this.start;i <= this.end; i += this.step){
            ret.add(i);
        }
        return ret;
    }   
}

您有什么想法或更聪明的方法来避免这个问题吗?

而且,我希望只用java标准库就能实现。

最佳答案

您不会得到像 0.60 这样的号码当简单地打印 Float 时或Double在Java中。但是,您可以将这些值格式化为适当的 String打印时的值。

所以要么...

  1. 您可以更改 asList() 的返回类型至List<String>并添加您喜欢的格式。
  2. 或者您可以更改此 Double 的方式您的List的值(value)显示在您的主Driver类。
<小时/>

如果将方法更改为此,则可以实现第一个选项

...
public List<String> asList(){
    List<String> ret = new ArrayList<String>();
    for(double i = this.start; i <= this.end; i += this.step){
        ret.add(String.format("%.2f", i));
    }
    return ret;
}
....

我用过String.format()此处,但 this 中描述了其他几个选项回答。

关于java - Java中的小数范围类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42992105/

相关文章:

ruby - 获取由 Time 对象组成的 ruby​​ 范围内的元素数

java - 使用Java时小数位数太多?

javascript - 如何从 JavaScript 数字中删除小数部分?

java - Java 中的重复检查器

java - Java Period 和 Duration 之间的微妙之处

java - 如何使用按钮更改图像并播放声音?

java - if 语句中 x 可以等于一系列数字/数字范围?

javascript - 每当用户更新其中一个时,如何使两个不同的范围 slider 输入显示相同的值?

Python - 如何在不四舍五入的情况下删除小数

java - 在 Java 中按星期几从星期一到星期日排序