如何在Java中显示百分比数字?

在 Excel 单元格中显示一个格式为百分比的值,例如12.3%。

默认情况下,该值显示为文本,但我需要将其显示为数字。

阅读 1.1k
2 个回答

如果你说的是通过java编辑excel,使单元格中本来显示为百分比的数值显示为数字(即去掉百分号并将数值除100),可以给单元格设置格式
在apache POI中可以这样写

CellStyle numberStyle = workbook.createCellStyle();
       
numberStyle.setDataFormat(workbook.createDataFormat().getFormat("0.00"));
        
cell.setCellStyle(numberStyle);

其他操作excel的库也差不太多。这样做的前提是你的excel文件中,单元格的值确实是数值而不是字符串。
如果你问的是java怎么将一个符合"^-?(?!0\d)\d+(\.\d+)?%$"的字符串转换为double类型或BigDecimal类型的变量,那么可以先通过正则验证字符串的有效性,然后用BigDecimal类从字符串中构造一个对象。

import java.math.BigDecimal;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String percentString = "25.5%";
        String regex = "^-?(?!0\\d)\\d+(\\.\\d+)?%$";

        if (Pattern.matches(regex, percentString)) {
            // 移除百分号并转换为BigDecimal
            String numericString = percentString.replace("%", "");
            BigDecimal percentValue = new BigDecimal(numericString);

            // 将百分数转换为小数形式
            BigDecimal decimalValue = percentValue.divide(BigDecimal.valueOf(100));

            System.out.println("Converted BigDecimal: " + decimalValue);
        } else {
            System.out.println("Invalid percent string");
        }
    }
}

鉴于你给的信息太少了,建议还是先丰富下问题吧

这个方法应该有很多吧,上面的那个回答已经给了一种,除了显示百分数之外,还有其他的很多种方式可以显示:

/*
https://demo.grapecity.com.cn/documents-api-excel-java/demos/numberformats
*/
// Create a new workbook
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getRange("A:H").setColumnWidth(17);

// Display 111 as 111.
worksheet.getRange("A1").setValue(111);
worksheet.getRange("A1").setNumberFormat("#####");

// Display 222 as 00222.
worksheet.getRange("B1").setValue(222);
worksheet.getRange("B1").setNumberFormat("00000");

// Display 12345678 as 12,345,678(千分位表示)
worksheet.getRange("C1").setValue(12345678);
worksheet.getRange("C1").setNumberFormat("#,#");

// Display .126 as 0.13.(小数点表示)
worksheet.getRange("D1").setValue(.126);
worksheet.getRange("D1").setNumberFormat("0.##");

// Display 74.4 as 74.400.(小数点后表示两位)
worksheet.getRange("E1").setValue(74.4);
worksheet.getRange("E1").setNumberFormat("##.000");

// Display 1.6 as 160.0%.(百分比表示)
worksheet.getRange("F1").setValue(1.6);
worksheet.getRange("F1").setNumberFormat("0.0%");

// Display 4321 as $4,321.00.(井号表示)
worksheet.getRange("G1").setValue(4321);
worksheet.getRange("G1").setNumberFormat("$#,##0.00");

// Display 8.75 as 8 3/4.(分数表示)
worksheet.getRange("H1").setValue(8.75);
worksheet.getRange("H1").setNumberFormat("# ?/?");
    
// Save to an excel file
workbook.save("NumberFormats.xlsx");

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题