Return (main, dhigh, dlow, sharedexponent), all as strings. The
        delta terms do not have sign indicators. Any item except the first
        may be None.

        `method` is passed to Uval.repvals() to compute representative
        statistical limits.

def text_pieces(self, method, uplaces=2, use_exponent=True):
        """Return (main, dhigh, dlow, sharedexponent), all as strings. The
        delta terms do not have sign indicators. Any item except the first
        may be None.

        `method` is passed to Uval.repvals() to compute representative
        statistical limits.

        """
        md, hi, lo = self.repvals(method)

        if hi == lo:
            return '%g' % lo, None, None, None

        if not np.isfinite([lo, md, hi]).all():
            raise ValueError('got nonfinite values when formatting Uval')

        # Deltas. Round to limited # of places because we don't actually know
        # the fourth moment of the thing we're trying to describe.

        from numpy import abs, ceil, floor, log10

        dh = hi - md
        dl = md - lo

        if dh <= 0:
            raise ValueError('strange problem formatting Uval; '
                             'hi=%g md=%g dh=%g' % (hi, md, dh))
        if dl <= 0:
            raise ValueError('strange problem formatting Uval; '
                             'lo=%g md=%g dl=%g' % (lo, md, dl))

        p = int(ceil(log10(dh)))
        rdh = round(dh * 10**(-p), uplaces) * 10**p
        p = int(ceil(log10(dl)))
        rdl = round(dl * 10**(-p), uplaces) * 10**p

        # The least significant place to worry about is the L.S.P. of one of
        # the deltas, which we can find relative to its M.S.P. Any precision
        # in the datum beyond this point is false.

        lsp = int(ceil(log10(min(rdh, rdl)))) - uplaces

        # We should round the datum since it might be something like
        # 0.999+-0.1 and we're about to try to decide what its most
        # significant place is. Might get -1 rather than 0.

        rmd = round(md, -lsp)

        if rmd == -0.: # 0 = -0, too, but no problem there.
            rmd = 0.

        # The most significant place to worry about is the M.S.P. of any of
        # the datum or the deltas. rdl and rdl must be positive, but not
        # necessarily rmd.

        msp = int(floor(log10(max(abs(rmd), rdh, rdl))))

        # If we're not very large or very small, or it's been explicitly
        # disabled, don't use scientific notation.

        if (msp > -3 and msp < 3) or not use_exponent:
            srmd = '%.*f' % (-lsp, rmd)
            srdh = '%.*f' % (-lsp, rdh)
            srdl = '%.*f' % (-lsp, rdl)
            return srmd, srdh, srdl, None

        # Use scientific notation. Adjust values, then format.

        armd = rmd * 10**-msp
        ardh = rdh * 10**-msp
        ardl = rdl * 10**-msp
        prec = msp - lsp

        sarmd = '%.*f' % (prec, armd)
        sardh = '%.*f' % (prec, ardh)
        sardl = '%.*f' % (prec, ardl)
        return sarmd, sardh, sardl, str(msp)