I'm trying to support RTL to left languages, and I'm testing with Arabic (which I know nothing about).
Is the negative/positive symbol supposed to be on the right or left of the number? I think it's supposed to be on the left, but when I use Android's DecimalFormat to put the number in the locale the device is set to, the symbol appears on the right..
Has anyone encountered this, know how to work around it? Best I can think is to print it with parentheses if it's negative, that should get around this but isnt ideal.
EDIT
Sorry, code always helps. If I print the below (and the longitude is negative):
DecimalFormat coord_df = new DecimalFormat("#.000000");
coord_df.format(loc.getLongitude())
It's printed like this
##,######-
where the # signs are numbers in arabic (like those shown on the eastern arabic row here: http://en.wikipedia.org/wiki/Eastern_Arabic_numerals)
I need to get the negative on the correct side of the number (which is the left I believe)
SOLUTION
I ended up just checking whether the device was in RTL whenever I needed to mess with displaying numbers like the answer here: android determine if device is in right to left language/layout
If the device is RTL then I use a negative subpattern with a negative sign as a suffix like this:
"#.000000,#.000000-"
You can use String. format("%. 2f", d) , your double will be rounded automatically.
Returns a copy of the decimal format symbols, which is generally not changed by the programmer or user. Return the grouping size. Gets the maximum number of digits allowed in the fraction portion of a number. Gets the maximum number of digits allowed in the integer portion of a number.
Use String.format("%. 2f", d); This method uses our JVM's default Locale to choose the decimal separator. For example, it would be a dot for US Locale, and for GERMANY, it would be a comma.
Just sharing another approach, in your text views you can set the text direction to Left to Right, it will shows the negative sign correctly.
textView.setTextDirection(TextView.TEXT_DIRECTION_LTR);
You can handle this by a specific pattern set in string.xml, separate the symbol (minus) from the absolute value of your number:
In string.xml (standard value)
<string name="number_pattern">%1$s%2$.0f</string>
In string.xml (Arabic value)
<string name="number_pattern">%2$.0f%1$s</string>
In your java program, pass the value parameters (absolute value and symbol) like bellow:
double numberAbs = (number< 0 ? -number: number);
String symbol = (number < 0 ? "-" : "");
return String.format(new Locale("en", "US"), getContext().getString(R.string.number_pattern), symbol, numberAbs);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With