【发布时间】:2022-01-27 17:42:10
【问题描述】:
我有两个像这样创建的双精度数组列表:
ArrayList <Double> axis_x = new ArrayList<Double>();
ArrayList <Double> axis_y = new ArrayList<Double>();
现在,我在使用时看到了计算的不同(因为我想简化计算)
for(int j=0; j<axis_x.size();j++) {
double ax_x = Double.parseDouble(axis_x.get(j).toString()) + Math.abs(left_scale);
axis_x.set(j,ax_x);//axis_y.get(i);
double ax_y=0.0f;
if(Double.parseDouble(axis_y.get(j).toString()) < 0.0f) {
ax_y = Math.abs(Double.parseDouble(axis_y.get(j).toString())) + Math.abs(up_scale);
}else if(Double.parseDouble(axis_y.get(j).toString()) > 0.0f) {
ax_y = Math.abs(Double.parseDouble(axis_y.get(j).toString()) - Math.abs(up_scale));
}else if(Double.parseDouble(axis_y.get(j).toString()) == 0.0f) {
ax_y = Math.abs(up_scale);
}
axis_y.set(j,ax_y);
}
VS
for(int j=0; j<axis_x.size();j++) {
double ax_x = axis_x.get(j) + Math.abs(left_scale);
axis_x.set(j,ax_x);
double ax_y=0.0f;
if(axis_y.get(j) < 0.0f) {
ax_y = Math.abs(axis_y.get(j)) + Math.abs(up_scale);
}else if(axis_y.get(j) > 0.0f) {
ax_y = Math.abs(axis_y.get(j)) - Math.abs(up_scale);
}else if(axis_y.get(j) == 0.0f) {
ax_y = Math.abs(up_scale);
}
axis_y.set(j,ax_y);
}
知道axis_y.get(i)应该是double,Double.parseDouble(axis_y.get(j).toString())和axis_y.get(i)不一样吗?我在这里遗漏了什么吗?
【问题讨论】:
-
一方面,您获得了双精度的原始值,另一方面,您将其转换为字符串,然后将其转换回双精度。这对于精度相对较低的数字应该没问题,但是如果精度很高,您将面临出现一些浮点错误的风险。对于浮点数,应尽可能避免类型转换。