Nano Hash - криптовалюты, майнинг, программирование

Как округлить число, превышающее максимальное значение длинного типа в Java?

Мне приходится обрабатывать действительно большие двойные значения и округлять их до следующего полного числа. Если я округляю двойное значение, я всегда получаю значение 9.223372036854776E18, которое оказывается максимальным длинным значением. Как мне округлить значения больше этого?

Редактировать: Просто для пояснения: я не программист на Java и пришел с фронта C. Я помогаю другу в этом деле. Я попробовал unsigned (очевидно, не сработало), погуглил и нашел BigDecimal и BigInteger. Попытался разыграть их, и это произошло с ошибкой. Вот почему я пришел сюда. Спасибо за помощь!


Ответы:


1

BigDecimal было бы решением содержать значения больше, чем long.

Прочитайте этот BigDecimal javadoc

Вам нужно создать экземпляр BigDecimal(yourDoubleValue); без кастинга.

09.11.2012
  • Я уже пытался привести двойное значение к BigDecimal и BigInteger. Но каждый раз вылетало. 09.11.2012
  • Предоставьте сообщение об исключении и код, который вы пробовали. 09.11.2012
  • @Tom: нет такой вещи, как приведение между примитивом и ссылочным типом. Вы должны делать BigDecimal.valueOf(doubleValue); 09.11.2012

  • 2

    По сути:

    Math.floor(d+0.5)
    

    но вы должны приспособиться к вычитанию, если d отрицательное.

    09.11.2012
  • На самом деле это самое простое решение моей проблемы. Спасибо! 09.11.2012

  • 3

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

    double reallyBigDouble
    BigDecimal x = new BigDecimal(reallyBigDouble);
    

    Чтобы округлить до ближайшего целого значения, вы можете использовать такой код:

    BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
    
    09.11.2012

    4

    Используйте BigDecimal.

    e.g.

    BigDecimal decimalA = new BigDecimal("98765432123456789");
    
    09.11.2012

    5

    Любое значение double, слишком большое, чтобы поместиться в long, уже представляет собой целочисленное значение, и его округление не будет иметь никакого эффекта. Это связано с тем, что двойное число содержит только 52 бита точности для его мантиссы, а длинное число содержит 64, поэтому, если значение слишком велико для long, у double не останется достаточной точности для хранения любых дробных частей.

    09.11.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..