论坛首页 Java企业应用论坛

去掉数字前面多余的0与小数点后多余的0

浏览 20476 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-17  

public static String trim0(String num, boolean f0dot, boolean fdot0) {
    int begin = 0;
    int end = num.length() - 1;
    while (num.charAt(begin) == '0') {
        ++begin;
    }
    if (f0dot && num.charAt(begin) == '.') {
        --begin;
    }
    while (num.charAt(end) == '0') {
        --end;
    }
    if (num.charAt(end) == '.') {
        if (fdot0) {
            ++end;
        } else {
            --end;
        }
    }
    if (begin <= end) {
        return num.substring(begin, end + 1);
    } else {
        return "0";
    }
}

public static void main(String[] args) {
    String num2 = "00000123.40";
    System.out.println(trim0(num2, true, true));
    System.out.println(trim0(num2, false, true));
    System.out.println(trim0(num2, true, false));
    System.out.println(trim0(num2, false, false));
    String num1 = "00000000.00";
    System.out.println(trim0(num1, true, true));
    System.out.println(trim0(num1, false, true));
    System.out.println(trim0(num1, true, false));
    System.out.println(trim0(num1, false, false));
    String num3 = "00000123.00";
    System.out.println(trim0(num3, true, true));
    System.out.println(trim0(num3, false, true));
    System.out.println(trim0(num3, true, false));
    System.out.println(trim0(num3, false, false));
    String num4 = "00000000.40";
    System.out.println(trim0(num4, true, true));
    System.out.println(trim0(num4, false, true));
    System.out.println(trim0(num4, true, false));
    System.out.println(trim0(num4, false, false));
}

123.4
123.4
123.4
123.4
0.0
.0
0
0
123.0
123.0
123
123
0.4
.4
0.4
.4
 
0 请登录后投票
   发表时间:2011-11-17   最后修改:2011-11-17
@leavesforeye 可能你误解LZ的意思了,他是以一般人的看法看00000123。数字倒转有很经典的算法。
呵呵,想到一个笑话:
向一個程序員借錢。
程序員問:你要借多少?
答:1000。
程序員說:那湊個整吧,給你1K。
接過來一數,原來是1024元!

zgzdzh 写道
这还求代码?
String str = "00000123.100";
System.out.println(Double.parseDouble(str));
结果:123.1

中间123.1是二进制存储的,可能会有精度问题(经典的double的相等不能用==)。
0 请登录后投票
   发表时间:2011-11-17  
汗 楼主不会是指
String num1 = "00000123";
String num2 = "123.1000";
Integer n1 = Integer.parseInt(num1);
Double n2 = Double.parseDouble(num2);
System.out.println(n1+","+n2); → 123,123.1
或者
String s1 = n1.toString();
String s2 = n2.toString();
System.out.println(s1+","+s2); → 123,123.1
贴出来都怕人笑话
0 请登录后投票
   发表时间:2011-11-17  
leavesforeye 写道
楼主123.10000不管后面有多少个0.System.out.print()的结果都是不带尾部的0.使用起来跟123.1没有任何区别。
00000123 这是一个八进制的数字,00000123 == 83。
所以这个问题可能不会有答案。

只是你不会有答案,并不代表别人就会没答案。
0 请登录后投票
   发表时间:2011-11-17   最后修改:2011-11-17
BigDecimal或者numberformat
http://download.oracle.com/javase/6/docs/api/java/text/NumberFormat.html
0 请登录后投票
   发表时间:2011-11-17   最后修改:2011-11-17
NumberFormat已故:




  • 大小: 5.1 KB
0 请登录后投票
   发表时间:2011-11-17  
kidneyball 写道
NumberFormat已故:





已故是什么意思哦 没明白
0 请登录后投票
   发表时间:2011-11-17   最后修改:2011-11-17
whaosoft 写道
kidneyball 写道
NumberFormat已故:





已故是什么意思哦 没明白


就是挂了,某个测试数据没通过,精度超出Double就玩不转了。

这个是全通的:



还有这个,不过没有判断双小数点(垃圾进,垃圾出)


  • 大小: 20.4 KB
  • 大小: 16.6 KB
0 请登录后投票
   发表时间:2011-11-17  
用format, 不是用parse,别乱下结论
0 请登录后投票
   发表时间:2011-11-17  
public static void main(String[] args) {
BigDecimal number = null;
number = new BigDecimal( "121212.123001201200123123123");
System.out.println(trimZeroOfNumber(number));
number = new BigDecimal( "000123123");
System.out.println(trimZeroOfNumber(number));
number = new BigDecimal("12121000");
System.out.println(trimZeroOfNumber(number));
number = new BigDecimal("0.0");
System.out.println(trimZeroOfNumber(number));
number = new BigDecimal("0");
System.out.println(trimZeroOfNumber(number));
}

public static String trimZeroOfNumber(Object value) {
NumberFormat fmt = NumberFormat.getInstance();
fmt.setMaximumFractionDigits(100);
fmt.setGroupingUsed(false);
return fmt.format(value);
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics