Javaウィジェット——浮動小数点数を人民元読み方文字列に変換
弟はJavaを初めて勉強して、浮動小数点数を人民元の読み方文字列に変えるプログラムを書いたばかりです.このプログラムのjavaソースファイルコードは以下の通りです.
import java.util.*;
public class Num2Rmb
{
private String[] hanArr= {" " , " " , " " , " " , " " ,
" " , " " , " " , " " , " "};
private String[] unitArr = {" ", " ", " "};
/**
*
* @param num
* @return 。 , 。
*/
private String[] divide(double num)
{
// long, 。
long zheng = (long)num;
// , , 100 2 。
//Math round , ( ) 。
long xiao = Math.round((num - zheng) * 100);
// 2 。
//return 。
//String valueOf(int i) , 。
return new String[]{zheng + ","+ String.valueOf(xiao)};
}
/**
* 12
* @param numStr
* @return 。
*/
private String toHanStr(String numStr)
{
int strLen = numStr.length();
int yu = strLen % 4;
//partNum ( 4 )。
// 0, strLen/4 partNum; strLen/4 + 1 partNum。
int partNum = yu == 0 ? strLen/4 : strLen/4 + 1;
//firstPartLen
int firstPartLen = strLen - (partNum - 1)*4;
String resultFirst = "";
String resultSecond = "";
String resultThird = "";
//
for (int i = 0 ; i < partNum ; i ++ )
{
//
if (i == 0)
{
// String substring [beginIndex, endIndex),
// : , 。
String firstPart = numStr.substring(0, firstPartLen);
//
for (int j = 0 ; j < firstPartLen ; j ++ )
{
//String charAt(int index), 。( )。
// char int , ASCII 48;
// char 48 int , '4' 4。
int num = firstPart.charAt(j) - 48;
// , , ( 、 、 )
if (j != firstPartLen-1 && num != 0)
{
resultFirst += hanArr[num] + unitArr[firstPartLen - 2 - j];
}
// , ,
else if (j == firstPartLen - 1 && num != 0)
{
resultFirst += hanArr[num];
}
// 0, 0,
else if (j == 2 && num == 0 && firstPart.charAt(1) - 48 == 0
&& firstPart.charAt(0) - 48 != 0
&& firstPart.charAt(firstPartLen - 1) - 48 != 0)
{
resultFirst += hanArr[num];
}
// hanArr unitArr
}
}
//
else if (i == 1)
{
String secondPart = numStr.substring(firstPartLen, (firstPartLen + 4));
int secPartLen = secondPart.length();
for (int k = 0 ; k < secPartLen ; k ++ )
{
int num = secondPart.charAt(k) - 48;
if (k != secPartLen-1 && num != 0)
{
resultSecond += hanArr[num] + unitArr[secPartLen - 2 - k];
}
else if (k == secPartLen - 1 && num != 0)
{
resultSecond += hanArr[num];
}
else if (k == 2 && num == 0 && secondPart.charAt(1) - 48 == 0
&& secondPart.charAt(secPartLen - 1) - 48 != 0)
{
resultSecond += hanArr[num];
}
}
// 0, , 。
//Integer parseInt(String s) : 。
if (Integer.parseInt(secondPart) == 0 && partNum == 3)
{
resultSecond = hanArr[0];
}
}
//
else if (i == 2)
{
String thirdPart = numStr.substring((firstPartLen + 4), strLen);
int thirdPartLen = thirdPart.length();
for (i = 0 ; i < thirdPartLen ; i ++ )
{
int num = thirdPart.charAt(i) - 48;
if (i != thirdPartLen-1 && num != 0)
{
resultThird += hanArr[num] + unitArr[thirdPartLen - 2 - i];
}
else if (i == thirdPartLen - 1 && num != 0)
{
resultThird += hanArr[num];
}
else if (i == 2 && num == 0 && thirdPart.charAt(1) - 48 == 0
&& thirdPart.charAt(thirdPartLen - 1) - 48 != 0)
{
resultThird += hanArr[num];
}
}
}
}
String result = "";
if (partNum == 1)
{
// 0
if (resultFirst == "")
{
result = hanArr[0] + " ";
}
else
{
result = resultFirst + " ";
}
}
else if (partNum == 2)
{
// 0
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + " ";
}
else
{
result = resultFirst + " " + " " + resultSecond+ " ";
}
}
else if (partNum == 3)
{
result = resultFirst + " " + " " + resultSecond + " " + " " + resultThird+ " ";
// 0
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0
&& Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + " ";
}
}
return result;
}
public static void main(String[] args)
{
// Num2Rmb nr , Num2Rmb
Num2Rmb nr = new Num2Rmb();
// 236711125.123
System.out.println(Arrays.toString(nr.divide(236711125.123)));
// 12
System.out.println(nr.toHanStr("123456789123"));
}
}