2014-09-06 2 views
0

Может кто-нибудь объяснить, что используется setZeroDigit и как именно он работает.
.Десятичный формат, присвоенный нулевой цифрой

double d = 123456.7899; 
DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
symbols.setZeroDigit('@'); 
symbols.setMinusSign('^'); 

DecimalFormat df = new DecimalFormat("-###,###.000",symbols); 

System.out.println(df.format(d)); 

это печатает^ABC, DEF.GI @, но я не понимаю, как он вычисляет выход. Я читаю javadocs, но это не очень помогает. Еще одна вещь - мой ru_US.

+0

Какой результат дает вам различные положительные и отрицательные числа? – usr2564301

ответ

2

Вы используете DecimalFormatSymbols, если хотите напечатать номера на каком-либо другом языке или языке, который не использует обычный набор символов для таких вещей, как отрицательный знак, знак процента и т. Д. Вы можете использовать setZeroDigit, если вы печатали номера на арабском языке, например, который использует точку для нуля.

В вашем примере вы сказали «используйте @ для нуля», и это именно то, что произошло.

Однако, есть немного больше. Символами, используемыми для 1, 2, 3 и т. Д., Считаются символы, следующие за символом 0, в любой кодировке символов, которую вы используете. Так получилось, что символы, следующие @ в обычных символьных кодировках, это A, B, C и т. Д.

Формат, который вы указали, требует округления до трех знаков после запятой, поэтому -123456.7899 становится -123456.79, который затем печатается с использованием символов @, A, B ... I вместо 0, 1, 2 ... 9. Вы также указали, что вместо - следует использовать ^, используя setMinusSign.

+0

Мне интересно узнать, как это генерируется^ABC, DEF.GI @ – sol4me

+0

Я только что обновил свой вопрос и да удвоил d = 123456.7899 – sol4me

+0

Вы просили только 3 десятичных знака, поэтому -123456.7899 округляется до -123456.790 alias^ABC, DEF.GI @ – ARLabs

Смежные вопросы