public static @NotNull DfType numberAsDecimalString(@NotNull DfaMemoryState state, @NotNull DfaValue arg) {
    LongRangeSet range = DfLongType.extractRange(state.getDfType(arg));
    if (range.isEmpty()) return DfType.TOP;
    long min = range.min();
    long max = range.max();
    DfType length;
    if (min >= 0) {
      length = intRange(LongRangeSet.range(String.valueOf(min).length(), String.valueOf(max).length()));
    }
    else if (max <= 0) {
      length = intRange(LongRangeSet.range(String.valueOf(max).length(), String.valueOf(min).length()));
    }
    else {
      length = intRange(LongRangeSet.range(1, Math.max(String.valueOf(max).length(), String.valueOf(min).length())));
    }
    return STRING_LENGTH.asDfType(length);
  }
public static @NotNull DfType numberAsDecimalString(@NotNull DfaMemoryState state, @NotNull DfaValue arg)