7
社区成员
发帖
与我相关
我的任务
分享
在Galaxybase中,为什么通过java执行算法查询之后返回给客户端的结果,解析写入到文件中会出现属性值为科学计数法的情况?
以下是代码:
public class Test {
public static void main(String[] args) throws IOException {
GalaxyBaseClient client = new GalaxyBaseClient("localhost", 8180);
String query = "g.V().hasLabel('person').has('age', gt(20)).values('name', 'age')";
GremlinResultSet result = client.submit(query);
FileWriter fw = null;
try {
fw = new FileWriter("test.csv");
String[] columnNames = {"name", "age"};
for (int i = 0; i < columnNames.length; i++) {
fw.write(columnNames[i]);
if (i < columnNames.length - 1) {
fw.write(",");
}
}
fw.write("\n");
while (result.hasNext()) {
Object[] values = result.next();
for (int i = 0; i < values.length; i++) {
Object value = values[i];
fw.write(value.toString());
if (i < values.length - 1) {
fw.write(",");
}
}
fw.write("\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
fw.close();
}
result.close();
client.close();
}
}
}
double类型的属性,在解析之后写入文件会变成科学计数法。 这个科学计数法的问题是java会自动将过大或过小的数据转换成科学计数法。
可以通过java的BigDecimal类解决。
String str=new BigDecimal(num+"").toString();
针对您的情况,可以作以下优化:
while (result.hasNext()) {
Object[] values = result.next();
for (int i = 0; i < values.length; i++) {
Object value = values[i];
if (value instanceof Double) {
String str = new BigDecimal(Double.toString((Double)value)).toString();
fw.write(str);
} else {
fw.write(value.toString());
}
if (i < values.length - 1) {
fw.write(",");
}
}
fw.write("\n");
}