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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Это, кажется, делает точно, что Вы хотите:
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
Можно создать пользовательскую строку формата.ToString (" ###,###.###### ") Пользовательские Строки Числового формата
Попытка просто использует "#,#", это добавляет запятые для тысяч и др., но я не знаю, сохранит ли это десятичные числа, иначе "#,###.####################", или какое-либо количество '# 'символы, которые Вы хотите после десятичного числа.
Попробуйте этого:
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 связывают Вас отправленный, точное место, которое Вы пошли бы, чтобы считать, как сделать это.
Это могло быть немного медленно, но это сделает то, что Вы хотите.
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;
}