Как отобразить double без усечения, чтобы плавать в форматировании строки?

В JavaScript даты могут быть преобразованы в число миллисекунд с момента epoc, вызвав метод getTime() или просто используя дату в числовом выражении.

Итак, чтобы получить разницу, просто вычтите две даты.

Чтобы создать новую дату на основе разности, просто передайте количество миллисекунд в конструкторе.

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin + oldEnd - oldBegin);

Это должно работать только

EDIT: Исправлена ​​ошибка, отмеченная @bdukes

EDIT:

Для объяснения поведения oldBegin, oldEnd и newBegin являются Date экземплярами , Операторы вызова + и - будут запускать автоматическое кастинг Javascript и автоматически вызывают метод прототипа valueOf() для этих объектов. Бывает, что метод valueOf() реализован в объекте Date в качестве вызова getTime().

Итак, в основном: date.getTime() === date.valueOf() === (0 + date) === (+date)

-1
задан constantinopolskaya 19 March 2019 в 21:33
поделиться

3 ответа

Используйте DecimalFormat для этого случая, что-то вроде:

    double mean = 0.592993499999999;
    NumberFormat formatter = new DecimalFormat("#0.000000000000000");
    System.out.println(formatter.format(mean));
0
ответ дан MS90 19 March 2019 в 21:33
поделиться

Использовать 16-значный десятичный разряд "% .16f"

String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width)).concat("s = ");
System.out.printf(f.concat("%.16f\n"), "mean", stats.mean());
System.out.printf(f.concat("%.16f\n"), "stddev", stats.stddev());
System.out.printf(f.concat("[%.16f, %.16f]"), confidence, stats.confidenceLo(), stats.confidenceHi());
0
ответ дан Sin2 19 March 2019 в 21:33
поделиться

Я использовал метод String.valueOf(aDoubleNumber) и изменил% f на% s в ваших выражениях printf. Это сработало для меня.

public static void main(String[] args)
    {
        double mean = 0.5929934999999997;
        double stddev = 0.00876990421552567;
        double confidenceLo = 0.12345666612123;
        double confidenceHi = 0.123456784435369;

        String confidence = "95% confidence interval";
        int width = confidence.length();
        String f = "%-".concat(String.valueOf(width))
            .concat("s = ");

        // changed the %f to %s and used String.valueOf method to convert first
        System.out.printf(f.concat("%s\n"), "mean", String.valueOf(mean));
        System.out.printf(f.concat("%s\n"), "stddev", String.valueOf(stddev));
        System.out.printf(f.concat("[%s, %s]"), confidence,
                (String.valueOf(confidenceLo)), String.valueOf(confidenceHi));
    }

Вывод:

среднее = 0,5929934999999997

stddev = 0,00876990421552567

95% доверительный интервал = [0,124345666612123, 0,1231456784435369]

0
ответ дан Paul Erlenmeyer 19 March 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: