当前位置: 首页 > news >正文

济南网站制作套餐/大连seo网站推广

济南网站制作套餐,大连seo网站推广,网站空间流量6g,怎么修改公司网站图片小数金额转换(精确到分)A.包含功能:1.支持任意大小的金额2.支持整形、小数金额转换3.支持负数转换4.支持以开头的数,如1005.支持前缀0转换,如-000001、000001等6.支持逗号去除,如100,000 转为 100000后转换为大写金额7.将转换后开…

小数金额转换(精确到分)

A.包含功能:

1.支持任意大小的金额

2.支持整形、小数金额转换

3.支持负数转换

4.支持以+开头的数,如+100

5.支持前缀0转换,如-000001、000001等

6.支持逗号去除,如100,000 转为 100000后转换为大写金额

7.将转换后开头的“壹拾”替换为“拾”(该功能可选,只要重新实现after方法即可)

8.小数位超过2位则强制进位,如:

10.001 ==> 10.01

10.005 ==> 10.01

10.561 ==> 10.57

10.565 ==> 10.57

9.小数位第一位不为0,则不加“零”否则加“零”,如:

10.001 ==> 拾元零壹分

10.005 ==> 拾元零壹分

10.561 ==> 拾元伍角柒分

10.565 ==> 拾元伍角柒分

10.若传入金额为整数,则结尾会加“整”,如:

10 ==> 拾元整

11 ==> 拾壹元整

101 ==> 壹佰零壹元整

说明:

结果中展示“拾”还是“壹拾”由after方法决定

B.关键代码:

1.整数部分转换:

/**

* 整数部分转换

*

* @param number 整数部分

* @return 大写金额

* @throws Exception

*/

private String convertInt(String number, boolean hasDecimal) throws Exception

{

if("0".equals(number))

{

return "";

}

StringBuffer sb = new StringBuffer();

//以8位为单位处理数字

int maxProcessUnit = 8;

//整数部分金额长度

int len = number.length();

//当前处理到哪一位(从左到右依次为0到1)

int currentOffset = 0;

//记录上一次有效的位置,用来控制是否需要添加“零”

int lastValidUnitPos = -1;

//每8位处理一次,总共需要处理多少次

int loop = len / maxProcessUnit;

for(int i = 0; i <= loop; i++)

{

//本次需要处理的位数

int currentLen = i == 0 ? len % maxProcessUnit : maxProcessUnit;

//用来辅助计算当前应该选哪个单位

int currentUnitOffset = 0;

//当前currentLen位是否有非0数字

boolean hasValidNumber = false;

for(int j=0; j

{

//当前要处理的数字

String numberAtOffset = number.substring(currentOffset, currentOffset+1);

int nao = Integer.parseInt(numberAtOffset);

//当前金额单位

int currentUnit = currentLen - currentUnitOffset - 1;

//将对应numberAtOffset位置的数字转为大写

if(nao > 0)

{

if(lastValidUnitPos >=0 && lastValidUnitPos - currentUnit > 1)

{

sb.append(NUM[0]);

}

sb.append(NUM[nao]);

hasValidNumber = true;

}

//处理numberAtOffset位置的单位

if(nao > 0)

{

sb.append(MONEY_UNIT[currentUnit]);

lastValidUnitPos = currentUnit;

}

else

{

if(currentUnit == 4 && hasValidNumber)

{

sb.append(MONEY_UNIT[currentUnit]);

lastValidUnitPos = currentUnit;

}

}

currentUnitOffset++;

currentOffset++;

}

//每8位之后增加单位“亿”

if(len >=maxProcessUnit && sb.length() > 0 && i < loop)

{

sb.append(MONEY_UNIT[MONEY_UNIT.length - 1]);

lastValidUnitPos = MONEY_UNIT.length - 1;

}

}

//添加单位“元”

sb.append(UNIT);

//添加单位“整”

if(!hasDecimal)

{

sb.append(ZHENG);

}

return sb.toString();

}

2.小数部分转换:

/**

* 小数部分转换

* 精确到分

*

* @param decimal 小数部分数值

* @param hasInt 整数部分是否为0

* @return

* @throws Exception

*/

private String convertDecimal(String decimal, boolean hasInt) throws Exception

{

if(Integer.parseInt(decimal) == 0)

{

return "";

}

StringBuffer sb = new StringBuffer();

for(int i=0; i< 2; i++)

{

int curNum = Integer.parseInt(decimal.substring(i,i+1));

if(curNum == 0)

{

if(i == 0 && hasInt)

{

sb.append(NUM[0]);

}

continue;

}

sb.append(NUM[curNum]);

sb.append(CHANGE_MONEY_UNIT[i]);

}

return sb.toString();

}

3.转换方法:

@Override

protected String doConvert(String number) throws Exception

{

StringBuffer sb = new StringBuffer();

if(isNegative(number))

{

number = number.substring(1);

sb.append(NEGATIVE_SIGN_DESC);

}

//检查并去除无效前缀0

BigDecimal decimal = new BigDecimal(number);

if("0".equals(decimal.toString()))

{

if(sb.length() > 0)

{

sb.setLength(sb.length() - 1);

}

return sb.append(NUM[0]).append(UNIT).append(ZHENG).toString();

}

BigDecimal decimalRounded = decimal.setScale(2, BigDecimal.ROUND_UP);

String newNum = decimalRounded.toString();

String[] numArr = newNum.split("\\.");

String numInt = numArr[0];

String numDecimal = newNum.split("\\.")[1];

sb.append(convertInt(numInt, 0 < Integer.parseInt(numDecimal)));

if(numArr.length > 1)

{

sb.append(convertDecimal(numDecimal, !"".equals(sb.toString())));

}

return sb.toString();

}

整数金额转换(方式一)

A.包含功能:

1.支持任意整数金额转换

2.支持负数转换

3.支持以+开头的数,如+100

4.支持前缀0转换,如-000001、000001等

5.支持逗号去除,如100,000 转为 100000后转换为大写金额

6.将转换后开头的“壹拾”替换为“拾”(该功能可选,只要重新实现after方法即可)

B.关键代码:

@Override

protected String doConvert(String number) throws Exception

{

StringBuffer sb = new StringBuffer();

//检查并去除可能出现的"+"

BigDecimal numDec = new BigDecimal(number);

if(isNegative(number))

{

sb.append(NEGATIVE_SIGN_DESC);

number = number.substring(1);

//去除前缀0

numDec = new BigDecimal(number);

}

//修正数据

number = numDec.toString();

if(numDec.toString().equals("0"))

{

return sb.append(NUM[0]).append(UNIT).toString();

}

int len = number.length();

int maxProcessUnit = 8;//以8位为单位处理数字

int currentOffset = 0;//当前处理到哪一位(从左到右依次为0到1)

int lastValidUnitPos = -1;//记录上一次有效的位置,用来控制是否需要添加“零”

int loop = len / maxProcessUnit;

for(int i = 0; i <= loop; i++)

{

//本次需要处理的位数

int currentLen = i == 0 ? len % maxProcessUnit : maxProcessUnit;

//用来辅助计算当前应该选哪个单位

int currentUnitOffset = 0;

//当前currentLen位是否有非0数字

boolean hasValidNumber = false;

for(int j=0; j

{

//当前要处理的数字

String numberAtOffset = number.substring(currentOffset, currentOffset+1);

int nao = Integer.parseInt(numberAtOffset);

//当前金额单位

int currentUnit = currentLen - currentUnitOffset - 1;

//将对应numberAtOffset位置的数字转为大写

if(nao > 0)

{

if(lastValidUnitPos >=0 && lastValidUnitPos - currentUnit > 1)

{

sb.append(NUM[0]);

}

sb.append(NUM[nao]);

hasValidNumber = true;

}

//处理numberAtOffset位置的单位

if(nao > 0)

{

sb.append(MONEY_UNIT[currentUnit]);

lastValidUnitPos = currentUnit;

}

else

{

if(currentUnit == 4 && hasValidNumber)

{

sb.append(MONEY_UNIT[currentUnit]);

lastValidUnitPos = currentUnit;

}

}

currentUnitOffset++;

currentOffset++;

}

//每8位之后增加单位“亿”

if(len >=8 && sb.length() > 0 && !NEGATIVE_SIGN_DESC.equals(sb.toString()) && i < loop)

{

sb.append(MONEY_UNIT[MONEY_UNIT.length - 1]);

lastValidUnitPos = MONEY_UNIT.length - 1;

}

}

//添加单位“圆整”

sb.append(UNIT);

return sb.toString();

}

整数金额转换(方式二)

A.包含功能:

1.支持任意整数金额转换

2.支持负数转换

3.支持以+开头的数,如+100

4.支持前缀0转换,如-000001、000001等

5.支持逗号去除,如100,000 转为 100000后转换为大写金额

6.将转换后开头的“壹拾”替换为“拾”(该功能可选,只要重新实现after方法即可)

B.关键代码:

@Override

protected String doConvert(String number) throws Exception

{

StringBuffer sb = new StringBuffer();

//检查并去除可能出现的"+"

BigDecimal numDec = new BigDecimal(number);

if(isNegative(number))

{

sb.append(NEGATIVE_SIGN_DESC);

number = number.substring(1);

//去除前缀0

numDec = new BigDecimal(number);

}

//修正数据

number = numDec.toString();

if(numDec.toString().equals("0"))

{

return sb.append(NUM[0]).append(UNIT).toString();

}

int len = number.length();

//当前处理位置,从左至右

int currentOffset = 0;

//记录上个非0数据位置

int lastValidNumPos = -1;

//记录最近一次添加的有效单位

int lastValidUnitPos = -1;

int unitLen = MONEY_UNIT.length - 1;

while(currentOffset < len)

{

String currentNum = number.substring(currentOffset, currentOffset+1);

int currentNumInt = Integer.parseInt(currentNum);

//计算单位

int currentIndex = len - currentOffset - 1;

int currentUnitPos = currentIndex % unitLen;

//是否需要替换lastValidUnitPos变量

boolean unitValid = false;

//判断是否需要加“零”,如101应为壹佰零一元整

if(lastValidUnitPos > 0 && lastValidUnitPos - currentUnitPos > 1 && currentNumInt > 0)

{

sb.append(NUM[0]);

}

//添加数字对应大写

if(currentNumInt > 0)

{

sb.append(NUM[currentNumInt]);

lastValidNumPos = currentOffset;

unitValid = true;

}

//判断是否需要加“万”

if(currentNumInt > 0 || (currentUnitPos == 4 && currentOffset - lastValidNumPos <= 3))

{

sb.append(MONEY_UNIT[currentUnitPos]);

unitValid = true;

}

//判断是否需要加“亿”

int remainLen = len - currentOffset - 1;

if(len - currentOffset - 1 > 0 && remainLen / unitLen > 0 && remainLen % unitLen == 0)

{

sb.append(MONEY_UNIT[MONEY_UNIT.length-1]);

currentUnitPos = MONEY_UNIT.length-1;

unitValid = true;

}

//替换lastValidUnitPos

if(unitValid)

{

lastValidUnitPos = currentUnitPos;

}

currentOffset++;

}

sb.append(UNIT);

return sb.toString();

}

说明:

1.完整源码见附件

2.源码文件说明:

小数金额转换 --> DecimalStrToRMB.java

整数金额转换(方式一)-->IntStrToRMB.java

整数金额转换(方式二)-->IntStrToRMB1.java

3.其他类请参考注释

http://www.lbrq.cn/news/1358965.html

相关文章:

  • 最专业的礼品网站案例参考/免费创建个人网页
  • 做政府门户网站建设/江苏网站seo设计
  • 北京网站建设有哪些/关键词排名优化易下拉技术
  • 做企业网站需要人维护么/前端seo主要优化哪些
  • 长春市做网站/域名权重
  • 网站建设自评报告/网络推广网站推广
  • 小白自己做网站/域名邮箱 400电话
  • 网站设置支付宝在线支付/官网百度
  • 企业官方网站地址/seo推广百度百科
  • 香港做指数的网站/贵州seo和网络推广
  • 品牌网站建设k小蝌蚪/商品推广软文写作500字
  • 新乡做网站公司电话/百度竞价排名机制
  • 贵阳专业做网站/开发定制软件公司
  • 广西汽车网网站建设/搜索引擎登录入口
  • 做软件常用的网站有哪些/上海抖音seo公司
  • 网站文章做排名/百度识图鉴你所见
  • winforms做网站/静态网站开发
  • 四位一体网站开发/郑州靠谱seo整站优化
  • 网站百度排名优化/免费建自己的网站
  • 如何建设购物网站/怎样制作网页新手自学入门
  • semrush/江西seo推广软件
  • 网上自学电脑课程/windows优化大师是电脑自带的吗
  • 网站开发与优化课程总结/网站建设网络推广公司
  • 个人官方网站怎么建设/深圳网站优化排名
  • 西宁市公司网站建设/近期重大新闻
  • 中国十大设计公司/重庆seo团队
  • 在哪个网站上可以找兼职做/郑州做网站推广哪家好
  • 济宁网站建设多少钱/上海好的网络推广公司
  • 有哪些网站可以做设计挣钱/福建seo学校
  • 做黄金的经常看什么网站/seo培训一对一
  • Linux驱动24 --- RkMedia 视频 API 使用
  • 不可变集合
  • Rust进阶-part3-生命周期
  • TCP协议与UDP协议
  • 2025-08-05Gitee + PicGo + Typora搭建免费图床
  • Vlog音效大升级!用Audition环境音效打造沉浸式体验