The Norwegian locale specifies that numbers formatted as percentages use a space followed by the percent ‘%
’ symbol. Under Aspose Cells for Java version 19.12 - when the Norwegian Locale is specified via the Workbook settings, cells set with the built-in “Percentage” format/style omit the space before the percent symbol.
For example, the following Java code creates two workbooks where the first uses the “EN-US” locale and the second uses “Norwegian (Norway)” locale. After the locale is applied to the workbook, the value 0.2573
is put in cell A1 and the built-in “Percentage” format is applied to the cell. Under the Norwegian locale, the decimal separator symbol ‘,’ is correct - however, the space before the percent symbol ‘%’ is omitted:
import java.text.NumberFormat;
final String fileName = [PATH_TO_SAVE] + "PercentFormat.xlsx";
final double testValue = 0.2573d;
System.out.println("Running on JDK Version: " +
System.getProperty("java.version"));
Locale[] testLocale = { new Locale("en", "US"), new Locale("no", "NO") };
for (Locale curLocale : testLocale) {
Workbook wb = new Workbook();
// Set the workbook to use the current locale
wb.getSettings().setLocale(curLocale);
Cell cell = wb.getWorksheets().get(0).getCells().get("A1");
// put the test value in the cell
cell.putValue(testValue);
// Apply the built-in format "Percentage" with 2 decimals
Style style = cell.getStyle();
style.setNumber(10);
style.update();
cell.setStyle(style);
System.out.println("Percent format under the locale: " +
curLocale.getDisplayName());
System.out.println("The Aspose formatted value is : " +
cell.getStringValue());
// Now use Java's Numberformat on the same value:
NumberFormat formatter = NumberFormat.getPercentInstance(curLocale);
formatter.setMinimumFractionDigits(2);
System.out.println("The Java formatted value is: " +
formatter.format(testValue));
String newName = fileName.replace(".xlsx", "_" + curLocale.getLanguage() + ".xlsx");
Files.deleteIfExists(Paths.get(newName));
wb.save(newName);
System.out.println("Saved file as: " + newName);
}
When the above code is run under Java 9 or higher, the following is output:
Running on JDK Version: 9.0.4
Percent format under the locale: English (United States)
The Aspose formatted value is: 25.73%
The Java formatted value is : 25.73%
Saved file as: PercentFormat_en.xlsx
Percent format under the locale: Norwegian (Norway)
The Aspose formatted value is: 25,73%
The Java formatted value is : 25,73 %
Saved file as: PercentFormat_no.xlsx
Note that for the Norwegian locale, the Java formatted value ‘25,73 %
’ correctly shows the space prior to the percent symbol.
Also please note that there seems to have been a fix under Java 9 related to the NumberFormat class and the Norwegian locale. If you run the same code under Java 8, the output becomes:
Running on JDK Version: 1.8.0_77
Percent format under the locale: English (United States)
The Aspose formatted value is: 25.73%
The Java formatted value is : 25.73%
Saved file as: PercentFormat_en.xlsx
Percent format under the locale: Norwegian (Norway)
The Aspose formatted value is: 25,73%
The Java formatted value is : 25,73%
Saved file as: PercentFormat_no.xlsx
However, if you modify the Windows’ region settings (under Control Panel > Control Panel\Clock and Region > Change date, time or number formats) to “Norwegian Bokmål (Norway)” and subsequently open either of the two saved workbooks in Excel, you should see that Excel correctly shows the value in cell A1 as ‘25,73 %’.
Thanks.