Double.parseDouble(list.get(i).toString()) 和 list.get(i) 如果列表是数组列表 <Double> 之间有区别吗
Is there a difference between Double.parseDouble(list.get(i).toString()) and list.get(i) if list is an arraylist<Double>
我有两个像这样创建的双精度数组列表:
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)
不一样吗?我在这里遗漏了什么吗?
请参阅上述两种获取 Double
物品的方法:
final ArrayList<Double> axis_x = new ArrayList<Double>();
// Way #1. Getting the Double item from the `List<Double>`
// without performing any conversions.
final int i = 0;
final Double x = axis_x.get(i);
// Way #2. Getting the Double item from the `List<Double>`
// with performing two redundant conversions.
final Double x =
// `String => Double` conversion.
Double.parseDouble(
// `Double => String` conversion.
axis_x.get(i).toString()
);
应该使用方法 #1 直接获取项目,即不执行任何转换。
方法 #2 使用了两个冗余转换:Double => String
和 String => Double
。
因此,应该避免这种方式。
#1: final Double x = axis_x.get(i);
双倍 <= 双倍
#2:final Double x = parseDouble(axis_x.get(i).toString());
双精度 <= 字符串 <= 双精度转换。
方式 2 不是聪明且较短的方式。
方式 1 也是精确值。
我有两个像这样创建的双精度数组列表:
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)
不一样吗?我在这里遗漏了什么吗?
请参阅上述两种获取 Double
物品的方法:
final ArrayList<Double> axis_x = new ArrayList<Double>();
// Way #1. Getting the Double item from the `List<Double>`
// without performing any conversions.
final int i = 0;
final Double x = axis_x.get(i);
// Way #2. Getting the Double item from the `List<Double>`
// with performing two redundant conversions.
final Double x =
// `String => Double` conversion.
Double.parseDouble(
// `Double => String` conversion.
axis_x.get(i).toString()
);
应该使用方法 #1 直接获取项目,即不执行任何转换。
方法 #2 使用了两个冗余转换:Double => String
和 String => Double
。
因此,应该避免这种方式。
#1: final Double x = axis_x.get(i);
双倍 <= 双倍
#2:final Double x = parseDouble(axis_x.get(i).toString());
双精度 <= 字符串 <= 双精度转换。
方式 2 不是聪明且较短的方式。 方式 1 也是精确值。