锁定老帖子 主题:去掉数字前面多余的0与小数点后多余的0
精华帖 (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 |
|
返回顶楼 | |
发表时间: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的相等不能用==)。 |
|
返回顶楼 | |
发表时间: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 贴出来都怕人笑话 |
|
返回顶楼 | |
发表时间:2011-11-17
leavesforeye 写道 楼主123.10000不管后面有多少个0.System.out.print()的结果都是不带尾部的0.使用起来跟123.1没有任何区别。
00000123 这是一个八进制的数字,00000123 == 83。 所以这个问题可能不会有答案。 只是你不会有答案,并不代表别人就会没答案。 |
|
返回顶楼 | |
发表时间:2011-11-17
最后修改:2011-11-17
BigDecimal或者numberformat
http://download.oracle.com/javase/6/docs/api/java/text/NumberFormat.html |
|
返回顶楼 | |
发表时间:2011-11-17
最后修改:2011-11-17
NumberFormat已故:
|
|
返回顶楼 | |
发表时间:2011-11-17
kidneyball 写道 NumberFormat已故:
已故是什么意思哦 没明白 |
|
返回顶楼 | |
发表时间:2011-11-17
最后修改:2011-11-17
whaosoft 写道 kidneyball 写道 NumberFormat已故:
已故是什么意思哦 没明白 就是挂了,某个测试数据没通过,精度超出Double就玩不转了。 这个是全通的: 还有这个,不过没有判断双小数点(垃圾进,垃圾出) |
|
返回顶楼 | |
发表时间:2011-11-17
用format, 不是用parse,别乱下结论
|
|
返回顶楼 | |
发表时间: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); } |
|
返回顶楼 | |