Почему Bigdecimal (удвойте d), конструкция все еще вокруг?

Вам не нужно все программировать

Я устал от всего этого, но тогда все должно быть включено в программу, как будто это всегда быстрее. все должно быть в сети, все должно быть сделано через компьютер. Пожалуйста, просто используйте ручку и бумагу. это быстрее и требует меньшего количества обслуживания.

14
задан mskfisher 4 November 2011 в 13:27
поделиться

3 ответа

Прекращение поддержки устарело. Части API помечаются как устаревшие только в исключительных случаях.

Итак, запускайте FindBugs как часть процесса сборки. FindBugs имеет API-интерфейс детектора PlugIn, а также имеет открытый исходный код (LGPL, IIRC).

2
ответ дан 1 December 2019 в 12:27
поделиться

Учитывая правильность поведения BigDecimal (double) , на мой взгляд, я не уверен, что это действительно так было бы такой проблемой.

Я бы не совсем согласился с формулировкой документации в конструкторе BigDecimal (double) :

Результаты этого конструктора могут быть несколько непредсказуемо . Можно Предположим, что запись new BigDecimal (0.1) в Java создает BigDecimal , что в точности равно 0,1 (немасштабированное значение 1 , со шкалой 1 ), но фактически оно равно к 0,1000000000000000055511151231257827021181583404541015625 .

(Курсив добавлен.)

Вместо того, чтобы говорить непредсказуемо , я думаю, что формулировка должна быть , это было бы даже неожиданно быть неожиданным поведением для тех, кто не осведомлен об ограничениях представления десятичных чисел с значениями с плавающей запятой .

Если помнить, что значения с плавающей запятой не могут точно представлять все десятичные значения, значение, возвращаемое с использованием BigDecimal (0.1) , является 0.1000000000000000055511151231257827021181583404541015625 , на самом деле имеет смысл.

Если BigDecimal (double) экземпляр BigDecimal создан экземпляром Big 1125 конструктор согласован, тогда я бы сказал, что результат предсказуем.

Я предполагаю, почему конструктор BigDecimal (double) не является устаревшим, потому что его поведение можно считать правильным, и пока кто-то знает, как работают представления с плавающей запятой, поведение конструктора это не так уж и удивительно.

20
ответ дан 1 December 2019 в 12:27
поделиться

Этот конкретный конструктор, как и все операции с плавающей запятой, является приближением. На самом деле он не сломан, просто есть недостатки.
Просто проведите свое исследование, подойдите к нему осторожно, и вы не получите никаких сюрпризов. Вы сталкиваетесь с тем же самым при назначении десятичных литералов двойным / плавающим.

1
ответ дан 1 December 2019 в 12:27
поделиться
Другие вопросы по тегам:

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