这可能是一个快速的问题,但我尝试谷歌搜索无济于事。基本上,我的一个输出列中有一个输出,有时会变成科学记数法。
示例是这个 3.9E-4。但是,如果数字足够大,它会将其保留为浮点数,例如 0.08544751199999999。
我如何压制科学记数法?!
这可能是一个快速的问题,但我尝试谷歌搜索无济于事。基本上,我的一个输出列中有一个输出,有时会变成科学记数法。
示例是这个 3.9E-4。但是,如果数字足够大,它会将其保留为浮点数,例如 0.08544751199999999。
我如何压制科学记数法?!
我不认为有办法用 Pig Latin 做到这一点。为了解决类似的问题,我给自己写了一个 UDF,它只是一个包装器String.format
:
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class SPRINTF extends EvalFunc<String> {
@Override
public String exec(Tuple input) throws IOException {
if (input.size() != 2) { return null; }
String output = null;
try {
String format = (String) input.get(0);
String value = input.get(1).toString();
switch (format.charAt(format.length()-1)) {
case 'b':
case 'B':
case 'h':
case 'H':
case 's':
case 'S':
case 'c':
case 'C':
output = String.format(format, value);
break;
case 'd':
case 'o':
case 'x':
case 'X':
output = String.format(format, Integer.parseInt(value));
break;
case 'e':
case 'E':
case 'f':
case 'g':
case 'G':
case 'a':
case 'A':
output = String.format(format, Double.parseDouble(value));
break;
}
return output;
} catch (Exception e) { return null; }
}
}
当然可以改进,但它应该让你知道如何开始。