1

这可能是一个快速的问题,但我尝试谷歌搜索无济于事。基本上,我的一个输出列中有一个输出,有时会变成科学记数法。

示例是这个 3.9E-4。但是,如果数字足够大,它会将其保留为浮点数,例如 0.08544751199999999。

我如何压制科学记数法?!

4

1 回答 1

2

我不认为有办法用 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; }
    }

}

当然可以改进,但它应该让你知道如何开始。

于 2013-06-24T23:04:38.853 回答