Just adding to @David Airam's answer here; the "incorrect" solution he gives is actually correct, but with a bit of tweaking. The XML file should contain:
<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string>
Now in the Java code:
String svalue = "test";
float sfloat= 3.1415926;
String sresult = getString(R.string.resource1, svalue, sfloat);
The exception that @David Airam reported is from trying to jam a String
into a format specifier with %f
, which requires a floating point type. Use float
and there is no such exception.
Also, you can use Float.valueOf()
to convert a String to a float in case your input data was originally a string (say, from a EditText
or something). However, you should always try/catch valueOf()
operations and handle the NumberFormatException
case, since this exception is unchecked.
%.1f work for me if you like to show only 1 digit after ','
Define is strings.xml file
<string name="price_format">$%,.2f</string>
//For using in databinding where amount is double type
android:text="@{@string/price_format(model.amount)}"
//For using in java runtime where priceOfModifier is double type
amountEt.setText(context.getResources().getString(R.string.price_format, priceOfModifier));
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