как я могу округлить двойное значение до 3 значащих цифр
Ты не можешь. Двойники представляют в двоичном виде. У них нет десятичных разрядов для округления. Единственный способ получить определенное количество десятичных разрядов - это преобразовать его в десятичное число и оставить его там. В тот момент, когда вы преобразуете его обратно в двойное, вы снова теряете десятичную точность.
Для всех поклонников, здесь и в других местах, конвертирования в другие радиусы и обратно или умножения и деления на степени десяти, пожалуйста, отобразите полученное двойное значение% 0,001 или что-то еще, что требует требуемая точность, и объясните результат.
РЕДАКТИРОВАТЬ: В частности, сторонники этих методов должны объяснить 92% частоту отказов следующего кода:
public class RoundingCounterExample
{
static float roundOff(float x, int position)
{
float a = x;
double temp = Math.pow(10.0, position);
a *= temp;
a = Math.round(a);
return (a / (float)temp);
}
public static void main(String[] args)
{
float a = roundOff(0.0009434f,3);
System.out.println("a="+a+" (a % .0001)="+(a % 0.001));
int count = 0, errors = 0;
for (double x = 0.0; x < 1; x += 0.0001)
{
count++;
double d = x;
int scale = 2;
double factor = Math.pow(10, scale);
d = Math.round(d * factor) / factor;
if ((d % 0.01) != 0.0)
{
System.out.println(d + " " + (d % 0.01));
errors++;
}
}
System.out.println(count + " trials " + errors + " errors");
}
}