Как предыдущие указанные ответы, это - последствие выполнения арифметики с плавающей точкой.
Как предыдущий предложенный плакат, Когда Вы делаете числовые вычисления, использование java.math.BigDecimal
.
Однако существует глюк к использованию BigDecimal
. Когда Вы преобразовываете от двойного значения до BigDecimal
, у Вас есть выбор использования нового BigDecimal(double)
конструктор или BigDecimal.valueOf(double)
статический метод фабрики. Используйте статический метод фабрики.
двойной конструктор преобразовывает всю точность double
к BigDecimal
, в то время как статическая фабрика эффективно преобразовывает ее в String
, затем преобразовывает это в BigDecimal
.
Это становится релевантным при столкновении с теми тонкими погрешностями округления. Число могло бы отобразиться как.585, но внутренне его значение '0.58499999999999996447286321199499070644378662109375'. Если бы Вы использовали BigDecimal
конструктор, Вы получили бы число, которое не равно 0,585, в то время как статический метод дал бы Вам значение, равное 0,585.
double value = 0.585; System.out.println(new BigDecimal(value)); System.out.println(BigDecimal.valueOf(value));
в моей системе дает
0.58499999999999996447286321199499070644378662109375 0.585
Я проверил страницу руководства wget
, и - сертификат без проверки
, похоже, влияет только на сертификат сервера ]. Вам необходимо указать свой самозаверяющий сертификат в качестве действующего сертификата CA локально.
Для этого укажите сертификат как - ca-certificate = ...
в wget
и -CAfile
в случае s_client
.
Вы также можете установить доверенные корневые сертификаты CA в OpenSSL в одном из нескольких способов: