android decimalformat for arabic, symbol is on rig

2020-07-10 08:21发布

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-"

3条回答
够拽才男人
2楼-- · 2020-07-10 08:50

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);
查看更多
ゆ 、 Hurt°
3楼-- · 2020-07-10 09:07

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);
查看更多
放我归山
4楼-- · 2020-07-10 09:09

I dont know what is your code but I get this with the code -1,111,11:

        DecimalFormat df2 = new DecimalFormat( "#,###,###.###" );
        Double dd=-1111.11;
        String res=df2.format(dd);
        ((EditText)findViewById(R.id.editText1)).setText(res);
查看更多
登录 后发表回答