Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将百分比字符串转换为BigDecimal?_Java - Fatal编程技术网

Java 如何将百分比字符串转换为BigDecimal?

Java 如何将百分比字符串转换为BigDecimal?,java,Java,在java中,如何将百分比字符串转换为BigDecimal 谢谢 String percentage = "10%"; BigDecimal d ; // I want to get 0.1 只要您知道%符号将始终位于字符串的末尾: BigDecimal d = new BigDecimal(percentage.substring(0, percentage.length()-1)); d.divide(100); // '%' means 'per hundred', so divide

在java中,如何将百分比字符串转换为BigDecimal

谢谢

String percentage = "10%";
BigDecimal d ; // I want to get 0.1 

只要您知道
%
符号将始终位于
字符串的末尾

BigDecimal d = new BigDecimal(percentage.substring(0, percentage.length()-1));
d.divide(100); // '%' means 'per hundred', so divide by 100
如果您不知道
%
符号将出现:

percentage = percentage.replaceAll("%", ""); // Check for the '%' symbol and delete it.

BigDecimal d = new BigDecimal(percentage.substring(0, percentage.length()-1));
d.divide(new BigDecimal(100));

尝试
新的十进制格式(“0.0#%”)。解析(百分比)

使用DecimalFormat的优点是可以避免脆弱的字符串操作,甚至可以根据您的区域设置(DecimalSeparator、GroupingSeparator、Minssign等)解析数字。
如果您不知道格式或不想硬编码,也可以使用
NumberFormat.getPercentInstance()

BigDecimal
类中没有
divide(int)
。这似乎是重复的问题:在这里,Namal用一行方法提供答案,而不是再次分割。很好。请记住,这对像“10.5%”这样的东西不起作用。@RasmusFaber它将使DecimalFormat的内部计算遭受精度损失!新的十进制格式(“0.0%”)。解析(“0.9%”->0.009000000000000001
BigDecimal d = new BigDecimal(percentage.trim().replace("%", "")).divide(BigDecimal.valueOf(100));
    DecimalFormat f = new DecimalFormat("0%");
    f.setParseBigDecimal(true);// change to BigDecimal & avoid precision loss due to Double
    BigDecimal d = (BigDecimal) f.parse("0.9%");