Отформатируйте число с запятыми, но сохраните десятичные числа

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

15
задан Community 23 May 2017 в 12:17
поделиться

5 ответов

Это, кажется, делает точно, что Вы хотите:

public void Code(params string[] args)
{
    Print(1000);
    Print(100000);
    Print(123.456);
    Print(100000.21 );
    Print(100200.123456);
}

void Print(double n)
{
    Console.WriteLine("{0:###,###.#######}", n);
}

1,000
100,000
123.456
100,000.21
100,200.123456
10
ответ дан 1 December 2019 в 04:41
поделиться

Можно создать пользовательскую строку формата.ToString (" ###,###.###### ") Пользовательские Строки Числового формата

0
ответ дан 1 December 2019 в 04:41
поделиться

Попытка просто использует "#,#", это добавляет запятые для тысяч и др., но я не знаю, сохранит ли это десятичные числа, иначе "#,###.####################", или какое-либо количество '# 'символы, которые Вы хотите после десятичного числа.

1
ответ дан 1 December 2019 в 04:41
поделиться

Попробуйте этого:

VB:

Dim vals() As Double = {1000, 100000, 123.456, 100000.21, 100200.123456}
For Each val As Double in vals
   Console.WriteLine(val.ToString("###,###.#########"))
Next val

C#:

double[] vals = new double[] {1000, 100000, 123.456, 100000.21, 100200.123456};
foreach (double val in vals)
{
    Console.WriteLine(val.ToString("###,###.#########"));
}

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

И MSDN связывают Вас отправленный, точное место, которое Вы пошли бы, чтобы считать, как сделать это.

0
ответ дан 1 December 2019 в 04:41
поделиться

Это могло быть немного медленно, но это сделает то, что Вы хотите.

public static string FormatNumber(double num)
{
    string s = num.ToString();
    string result = "";

    if(s.IndexOf('.') != -1)
    {
        result = s.Substring(s.IndexOf('.'));
        s = s.Substring(0, s.IndexOf('.'));
    }

    while (s.Length > 3)
    {
        result = "," + s.Substring(s.Length - 3);
        s = s.Substring(0, s.Length - 3);
    }
    if (s.Length == 0)
        return result.Substring(1);
    return s + result;
}
0
ответ дан 1 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

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