我想要一个提供十进制值范围的类。
由于 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
打印时的值。
所以要么...
- 您可以更改
asList()
的返回类型至List<String>
并添加您喜欢的格式。 - 或者您可以更改此
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/