C++ является названием языка программирования, который был утвержден комитетами по международным стандартам (ANSI/ISO).
VC ++ (C++ “Visual ”) является названием продукта компилятора C++ Microsoft и иногда, но не официально, IDE, это поставляется с (“Visual Studio”).
Вы можете округлить до пятого десятичного знака, сделав его первым десятичным знаком, умножив свое число. Затем выполните обычное округление и снова сделайте его пятым десятичным разрядом.
Допустим, округляемое значение представляет собой двойное
с именем x
:
double factor = 1e5; // = 1 * 10^5 = 100000.
double result = Math.round(x * factor) / factor;
Если вы хотите округлить до 6 знаков после запятой, пусть множитель
будет 1e6
и т. Д.
Умножить на 100000. Добавить 0,5. Усечь до целого числа. Затем разделите на 100000.
Код:
double original = 17.77777777;
int factor = 100000;
int scaled_and_rounded = (int)(original * factor + 0.5);
double rounded = (double)scaled_and_rounded / factor;
Что бы вы ни делали, если вы получите значение double
, оно вряд ли будет ровно 5 десятичных знаков. Бинарная арифметика с плавающей запятой работает не так. Лучшее, что вы сделаете, - это «двойное значение , ближайшее к исходному значению, округленное до 5 знаков после запятой». Если бы вы распечатали точное значение этого двойного числа, оно, вероятно, все равно будет иметь более 5 десятичных знаков.
Если вам действительно нужны точные десятичные значения, вы должны использовать BigDecimal
.
Если вас устраивают внешние библиотеки, вы можете взглянуть на microfloat , в частности MicroDouble.toString (double d, int length) .
Попробуйте следующее
double value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.565858845));
System.out.println(value); // prints 5.56586
value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.56585258));
System.out.println(value); // prints 5.56585
Или, если вам нужно минимальное количество кода
, используйте статический импорт
import static java.lang.Double.valueOf;
import static java.util.Locale.US;
import static java.lang.String.format;
И
double value = valueOf(format(US, "%1$.5f", 5.56585258));
с уважением,
public static double roundNumber(double num, int dec) {
return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
}
DecimalFormat roundFormatter = new DecimalFormat("########0.00000");
public Double round(Double d)
{
return Double.parseDouble(roundFormatter.format(d));
}