Мне нужно убедиться, что все мои десятичные числа всегда имеют длину не более 15 символов (включая точку), сохраняя при этом как можно большую точность. Таким образом, это должно быть максимум 15 символов, включая «.» «E» для обозначения scientifi c и «-».
Я думал о том, чтобы использовать обозначение scientifi c для больших чисел и использовать округление для небольших чисел.
Например, для 1234567891234567.123456789 я бы использовал scientifi c нотацию, но для 0.123456789123456789 я бы просто округлил ее. Я могу указать общее количество символов для представления.
Благодарен за любые предложения или указатели.
РЕДАКТИРОВАТЬ: еще несколько мыслей - число, такое как 0,000000000000024, можно представить без потерь с помощью 24000E -18. В то время как 0.123456789123424, например, должен понести некоторые потери, что, конечно, затрудняет написание каких-либо простых ветвлений al go.
EDIT2: формат, который мы используем для передачи данных, это альфа-цифра 1022 * и ограничивает данные до 15 символов. Я должен написать код, удовлетворяющий формату, чтобы данные могли передаваться без запуска ошибок формата, но при этом сохраняя максимально возможную точность в пределах ограничения.
EDIT3: я использую это для проверки своих функций, но так далеко не все в ряде случаев:
Random rnd = new Random();
double n = 100000 + rnd.nextDouble() * 900000;
String res;
double rangeMin = -123456789123456D;
double rangeMax = 123456789123456D;
String val;
for (int i=1;i<=1000;i++) {
n = rangeMin + (rangeMax - rangeMin) * rnd.nextDouble();
val = Double.toString(n);
res = shorteningFunction(val);
System.out.println(val + " " + val.length() + " " + res + " " + res.length());
}