输入大写输出阿拉伯数字bug 本帖最后由 SailorZhe 于 2013-05-01 16:45:23 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 getSign(int start,String s)方法里面:计算完“百”之后,max被赋值成100,这时候再计算“亿”,语句max *= r就多乘了100。 public class Test{ long total=0; public static void main(String[] args) { Test t= new Test(); t.f2(); } void f2(){ String s="一亿三千五百六十四万两千两百四十八"; String[] s1=new String[3]; s1[0]=s.substring(0,s.indexOf("亿")); s1[1]=s.substring(s.indexOf("亿")+1,s.indexOf("万")); s1[2]=s.substring(s.indexOf("万")+1,s.length()); for(int i =0;i<s1.length;i++){ s1[i]=s1[i].replace("一","1"); s1[i]=s1[i].replace("两","2"); s1[i]=s1[i].replace("三","3"); s1[i]=s1[i].replace("四","4"); s1[i]=s1[i].replace("五","5"); s1[i]=s1[i].replace("六","6"); s1[i]=s1[i].replace("七","7"); s1[i]=s1[i].replace("八","8"); s1[i]=s1[i].replace("九","9"); } parse(s1[0], 100000000); parse(s1[1], 10000); parse(s1[2],1); System.out.println("转换前:"+s); System.out.println("转换后:"+total); } void parse(String s,long N){ for(int i=0;i<s.length();i++){ char c=s.charAt(i); if(c=='千'){ total+=(s.charAt(i-1)-48)*1000*N; } if(c=='百'){ total+=(s.charAt(i-1)-48)*100*N; } if(c=='十'){ total+=(s.charAt(i-1)-48)*10*N; } } total+=(s.charAt(s.length()-1)-48)*N; }} 刚才发的有问题,重发一个import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Test{ long total=0; public static void main(String[] args) { Test t= new Test(); t.f2(); } void f2(){// String s="六十四万两千两百四十八"; String s="一亿三千五百六十四万两千两百四十八"; String old=s.toString(); for(int i =0;i<s.length();i++){ s=s.replace("一","1"); s=s.replace("两","2"); s=s.replace("三","3"); s=s.replace("四","4"); s=s.replace("五","5"); s=s.replace("六","6"); s=s.replace("七","7"); s=s.replace("八","8"); s=s.replace("九","9"); } ArrayList<String> list = new ArrayList<String>(); Map<String,String> map = new HashMap<String,String>(); if(s.indexOf("亿")!=-1){ map.put("亿",s.substring(0,s.indexOf("亿"))); s=s.substring(s.indexOf("亿")+1); } if(s.indexOf("万")!=-1){ map.put("万",s.substring(0,s.indexOf("万"))); s=s.substring(s.indexOf("万")+1); } if(s.length()>0){ map.put("个",s); } for(Iterator<String>it=map.keySet().iterator();it.hasNext();){ String key=it.next(); if(key.equals("亿")) parse(map.get(key), 100000000); if(key.equals("万")) parse(map.get(key), 10000); if(key.equals("个")) parse(map.get(key), 1); } System.out.println("转换前:"+old); System.out.println("转换后:"+total); } void parse(String s,long N){ for(int i=0;i<s.length();i++){ char c=s.charAt(i); if(c=='千'){ total+=(s.charAt(i-1)-48)*1000*N; } if(c=='百'){ total+=(s.charAt(i-1)-48)*100*N; } if(c=='十'){ total+=(s.charAt(i-1)-48)*10*N; } } total+=(s.charAt(s.length()-1)-48)*N; }} 问题出现在你的这个代码块中,就这个private long getSign(int start,String s) 。因为你的Max是在for外面定义的,当你在for中使用时,如你输入的是一百万,在for中当i=1时,max就变为了100,再赋值给sign,然后运行i=2,但开始运行前,你的max是多少?是100,因为它没有被从新赋值或者从新定义初始化,所以在i=2运行到了亿就会这样,max *= r (100 *= 100000000),结果就成了一万亿了,你必须在for中定义max并初始化为1才可以,因为这样在for每次循环时都可以保证max=1,这样就不会出现max保持前面赋的100而出错了。所以这个主要是max的定义初始化的位置不对,放for里面就好了。 不知道哪里错了,不是我期望的结果。 如何将文本中的字段分解后导入SQL Server,恳请帮忙 在javabeen中,这句话是什么意思? 看编成思想看的郁闷 Enumeration的方法是谁来实现的 这个错务是怎嫫回事 xml存储数据,欢迎提供源码和建议 求 The JAVA Programming Language,Third Edition ebook 菜鸟一问,用TextPad运行程序时遇到的问题 谁有jbuilder6相关的e-book呢?奉上xx分 xml中的<IDOCTYPE ....被干掉了。 如何对鼠标点击选项判断操作
计算完“百”之后,max被赋值成100,这时候再计算“亿”,语句max *= r就多乘了100。
long total=0;
public static void main(String[] args) {
Test t= new Test();
t.f2();
}
void f2(){
String s="一亿三千五百六十四万两千两百四十八";
String[] s1=new String[3];
s1[0]=s.substring(0,s.indexOf("亿"));
s1[1]=s.substring(s.indexOf("亿")+1,s.indexOf("万"));
s1[2]=s.substring(s.indexOf("万")+1,s.length());
for(int i =0;i<s1.length;i++){
s1[i]=s1[i].replace("一","1");
s1[i]=s1[i].replace("两","2");
s1[i]=s1[i].replace("三","3");
s1[i]=s1[i].replace("四","4");
s1[i]=s1[i].replace("五","5");
s1[i]=s1[i].replace("六","6");
s1[i]=s1[i].replace("七","7");
s1[i]=s1[i].replace("八","8");
s1[i]=s1[i].replace("九","9");
} parse(s1[0], 100000000);
parse(s1[1], 10000);
parse(s1[2],1);
System.out.println("转换前:"+s);
System.out.println("转换后:"+total);
}
void parse(String s,long N){
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='千'){
total+=(s.charAt(i-1)-48)*1000*N;
}
if(c=='百'){
total+=(s.charAt(i-1)-48)*100*N;
}
if(c=='十'){
total+=(s.charAt(i-1)-48)*10*N;
}
}
total+=(s.charAt(s.length()-1)-48)*N;
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class Test{
long total=0;
public static void main(String[] args) {
Test t= new Test();
t.f2();
}
void f2(){
// String s="六十四万两千两百四十八";
String s="一亿三千五百六十四万两千两百四十八";
String old=s.toString();
for(int i =0;i<s.length();i++){
s=s.replace("一","1");
s=s.replace("两","2");
s=s.replace("三","3");
s=s.replace("四","4");
s=s.replace("五","5");
s=s.replace("六","6");
s=s.replace("七","7");
s=s.replace("八","8");
s=s.replace("九","9");
}
ArrayList<String> list = new ArrayList<String>();
Map<String,String> map = new HashMap<String,String>();
if(s.indexOf("亿")!=-1){
map.put("亿",s.substring(0,s.indexOf("亿")));
s=s.substring(s.indexOf("亿")+1);
}
if(s.indexOf("万")!=-1){
map.put("万",s.substring(0,s.indexOf("万")));
s=s.substring(s.indexOf("万")+1);
}
if(s.length()>0){
map.put("个",s);
}
for(Iterator<String>it=map.keySet().iterator();it.hasNext();){
String key=it.next();
if(key.equals("亿")) parse(map.get(key), 100000000);
if(key.equals("万")) parse(map.get(key), 10000);
if(key.equals("个")) parse(map.get(key), 1);
}
System.out.println("转换前:"+old);
System.out.println("转换后:"+total);
}
void parse(String s,long N){
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='千'){
total+=(s.charAt(i-1)-48)*1000*N;
}
if(c=='百'){
total+=(s.charAt(i-1)-48)*100*N;
}
if(c=='十'){
total+=(s.charAt(i-1)-48)*10*N;
}
}
total+=(s.charAt(s.length()-1)-48)*N;
}
}