需求:用socket 网络编程,从输入框(也就是图中的2)中输入10/3,机器检测到会产生2位以上的小数时,就会询问要保留几位小数,客户端在输入框再输入“3位”,机器就会按照该要求输出结果,只用考虑做一种情况,不用考虑扩展,界面代码我已经贴上面了,部分路径什么的可能要很简单的修改一下,这个需求说难不难,说简单不简单,小弟才疏学浅,还请大神们不吝赐教啊,如果觉得懒得写,大家可以直接在楼下讨论,小弟3个小时内秒回
我不想下你的代码去看,如果你能看懂下面的代码,你集成起来绝对不是问题。
PS:下面有几个地方需要你稍微注意一下,自己看...
[code="java"]
public class DoubleFormat {
/**
* @param args
*/
public static void main(String[] args) {
//double doubleValue = 10/3; //int整形计算结果是3.0
//double doubleValue1 = 10/3.0; //double浮点数计算结果是3.3333333333333335(16位小数)
//System.out.println("计算后浮点数的值:"+doubleValue1);
//String stringValue1 = String.valueOf(doubleValue1);
//System.out.println("转化为字符串的值:"+stringValue1);
double dividend = 10;
double divisor = 3.0;
int decimal = 2;
boolean isNeedAll = true;
System.out.println("被除数:"+dividend +", 除数:"+divisor+",保留小数位:"+decimal);
System.out.println("计算完转化为字符串的值:"+calcWithFormat(dividend, divisor, decimal, isNeedAll));
}
/**
* 带格式化的计算结果输出
* @param dividend 被除数
* @param divisor 除数
* @param decimal 保留的小数位数
* @param isNeedAll 是否所有的计算结果都进行格式化
* @return
*/
public static String calcWithFormat(double dividend, double divisor, int decimal, boolean isNeedAll){
String result = null;
final double EPSINON = 0.000001;
if((divisor >= -EPSINON) && (divisor <= EPSINON)){
return "除数不能为0";
}
double doubleValue = dividend/divisor;
String stringValue = String.valueOf(doubleValue);
java.text.DecimalFormat df = new java.text.DecimalFormat("#.00");
if(isNeedAll){
result = df.format(doubleValue);
}else{
if(stringValue.contains(".") && stringValue.substring(stringValue.lastIndexOf(".")).length() > decimal){
result = df.format(doubleValue);
}else{
result = String.valueOf(doubleValue);
}
}
return result;
}
}
[/code]