Преобразование возможно нулевого значения Double в строку без экспоненты - PullRequest
3 голосов
/ 09 июля 2020

Я пытаюсь создать функцию, которая будет выводить Double как String со следующими требованиями:

  1. Он не будет отображаться с показателями. Я считаю, что Double.toString (dblVal) или dblVal.toString () позаботится о проблеме экспоненты.
  2. Если Double имеет значение null, это не приведет к ошибке и будет отображаться как «null». Я считаю, что String.valueOf (dblVal) позаботится об этом автоматически, если Double имеет значение null.

Вот что у меня есть:

function doubleToString(Double dbl) {
    String strVal = null;
    if (dbl != null)
        strVal = String.valueOf(dbl);
    
    return strVal;
}

Каким будет лучший способ для достижения обоих требований? Я не думаю, что String.valueOf избавится от экспоненты, поэтому мне не следует использовать String.valueOf () и вместо этого использовать dblVal.toString (), а затем просто вручную проверить перед рукой, является ли он нулевым или нет, и если да, сделайте strVal нулевым?

Ответы [ 3 ]

3 голосов
/ 09 июля 2020

Не существует «единого» стандартного библиотечного метода, который бы делал все, что вам нужно. Более сложная часть - «не показывать экспоненты» - я думаю, что это можно сделать с помощью класса BigDecimal. Это покрывает оба ваших требования:

String doubleToString(Double dbl) {
    if (dbl == null) return "null";
    else return BigDecimal.valueOf(dbl).toPlainString();
}

Пример: doubleToString(1234e-100) возвращает 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001234

1 голос
/ 09 июля 2020

Использование Java 8 Optional:

String doubleToString(Double dbl) {
    return Optional.ofNullable(dbl)
            .map(d -> BigDecimal.valueOf(d).toPlainString())
            .orElse("null");
}

Хотя я не уверен, что это «лучший способ», как вы просили!

1 голос
/ 09 июля 2020

Думаю, вам подойдет следующий код:

public class Solution{
    public static void main(String []args) {
        
        Double dblValue1 =  null;
        System.out.println(doubleToString(dblValue1));
        
        Double dblValue2 =  Double.parseDouble("5.895E+07");
        System.out.println(doubleToString(dblValue2));
            
}

    private static String doubleToString(Double dblValue) {
               
        if (dblValue != null) return BigDecimal.valueOf(dbl).toPlainString();
        else return "null";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...