Java 显示2个浮点数,四舍五入到小数点后2位,但不丢失较大的浮点数

Java 显示2个浮点数,四舍五入到小数点后2位,但不丢失较大的浮点数,java,string,floating-point,formatting,double,Java,String,Floating Point,Formatting,Double,我从网络服务中获得两个数字num1和num2,它们可以用双精度表示,小数位数未知(我的意思是可以是3、4或5等)。 这些数字代表一个百分比,因此可能是0.34567,即34.567% 如果num1大于num2,我需要用两位小数位显示它们(或者没有小数位,而不是34.00%) 我尝试了以下方法: String num1 = "0.3547"; String num2 = "0.354"; int fixed = 2; int diff = Math.abs(num1.length()

我从网络服务中获得两个数字
num1
num2
,它们可以用双精度表示,小数位数未知(我的意思是可以是3、4或5等)。
这些数字代表一个百分比,因此可能是0.34567,即34.567%
如果
num1
大于
num2
,我需要用两位小数位显示它们(或者没有小数位,而不是34.00%)

我尝试了以下方法:

String num1 = "0.3547";  
String num2 = "0.354";  

int fixed = 2;  
int diff = Math.abs(num1.length() - num2.length());  
double tmp = 0.0d;  
double d1 = Double.valueOf(num1);  
double d2 = Double.valueOf(num2);  
tmp = (d1 > d2)? d1 : d2;  
while(diff > 0) {  
    StringBuilder sb = new StringBuilder("%.");  
    sb.append(String.valueOf(fixed + diff)).append("f");  
    String formatter = sb.toString();  
    System.out.println(formatter);  
    String round = String.format(formatter, tmp);  
    tmp = Double.parseDouble(round);  
    --diff;  
}  

String final1 = String.format("%.2f", tmp);  
String final2 = String.format("%.2f", (d1 < d2)? d1 : d2);  
System.out.println(final1 + " vs " + final2);   
String num1=“0.3547”;
字符串num2=“0.354”;
int固定=2;
int diff=Math.abs(num1.length()-num2.length());
双tmp=0.0d;
double d1=double.valueOf(num1);
double d2=double.valueOf(num2);
tmp=(d1>d2)?d1:d2;
而(差异>0){
StringBuilder sb=新的StringBuilder(“%”);
sb.append(String.valueOf(fixed+diff)).append(“f”);
字符串格式化程序=sb.toString();
System.out.println(格式化程序);
String round=String.format(格式化程序,tmp);
tmp=Double.parseDouble(圆形);
--差异;
}  
String final1=String.format(“%.2f”,tmp);
String final2=String.format(“%.2f”,(d1
输出为:

0.36对0.35


这种方法和结果有多明智?我可能想错了吗?

对于小数点后两位的位置,请执行以下操作:

num = (Maht.round(num * 10_000))
num /= 10_000
如果你只是除以100而不是10_000,你就得到了直接的百分比

要删除零,只需将数字转换为字符串

String.valueOf(num)
并搜索正则表达式模式

"\\.0"
并采取相应行动,如果发现,将其移除

完整的解决方案(有点不同,因为我在使用正则表达式时遇到了一些问题):


为什么要投反对票?@talex:这对显示两个数字有什么帮助?@talex:请在帖子中查看更新这两个数字都是35是的,它分别输出35.47%和35.4%,因为你说过如果需要的话,你想要两个除硅器。对于“0.31”,它将输出31%,或者您希望在最后一个字符串中没有小数点,以便“0.123”将变为12%,而“0.456”将变为46%?不,它只给出
35
。没有小数点。我测试了itwhat?,我将代码一对一地复制(最后添加了分号)到eclipse中,并输出小数位。所以我不知道怎么了。numX生成I so:Double numX=Double.valueOf(num1)当我运行这个时,我得到
35
。代码:String num1=“0.3547”;字符串num2=“0.354”;double d1=double.parseDouble(num1);整数1=(整数)数学四舍五入(d1*10000);字符串num1ToNumber=String.valueOf(number1/=100);System.out.println(“num1=“+num1ToNumber”);
//Rounding on to two decimalplaces and writing to a String    
numX = (Math.round(numX * 10_000));
String numXStr = String.valueOf(numX /= 100);
//Removing of ".0" endings
if (numXStr .endsWith(".0")) {
  numXStr = numXStr .substring(0, numXStr .length() - 2);
}
numXStr += "%"; //Adding the percent char at the end
System.out.println(numXStr) //outputting