将金额人民币转化为大写 C#

什么也不说了,直接上代码 
1
/// <summary> 2 /// 转换人民币大小金额 3 /// </summary> 4 /// <param name="num">金额</param> 5 /// <returns>返回大写形式</returns> 6 public static string CmycurD(decimal num) 7 { 8 string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 9 string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 10 string str3 = ""; //从原num值中取出的值 11 string str4 = ""; //数字的字符串形式 12 string str5 = ""; //人民币大写金额形式 13 int i; //循环变量 14 int j; //num的值乘以100的字符串长度 15 string ch1 = ""; //数字的汉语读法 16 string ch2 = ""; //数字位的汉字读法 17 int nzero = 0; //用来计算连续的零值是几个 18 int temp; //从原num值中取出的值 20 num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数 21 str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式 22 j = str4.Length; //找出最高位 23 if (j > 15) { return "溢出"; } 24 str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分 25 26 //循环取出每一位需要转换的值 27 for (i = 0; i < j; i++) 28 { 29 str3 = str4.Substring(i, 1); //取出需转换的某一位的值 30 temp = Convert.ToInt32(str3); //转换为数字 31 if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15)) 32 { 33 //当所取位数不为元、万、亿、万亿上的数字时 34 if (str3 == "0") 35 { 36 ch1 = ""; 37 ch2 = ""; 38 nzero = nzero + 1; 39 } 40 else 41 { 42 if (str3 != "0" && nzero != 0) 43 { 44 ch1 = "" + str1.Substring(temp * 1, 1); 45 ch2 = str2.Substring(i, 1); 46 nzero = 0; 47 } 48 else 49 { 50 ch1 = str1.Substring(temp * 1, 1); 51 ch2 = str2.Substring(i, 1); 52 nzero = 0; 53 } 54 } 55 } 56 else 57 { 58 //该位是万亿,亿,万,元位等关键位 59 if (str3 != "0" && nzero != 0) 60 { 61 ch1 = "" + str1.Substring(temp * 1, 1); 62 ch2 = str2.Substring(i, 1); 63 nzero = 0; 64 } 65 else 66 { 67 if (str3 != "0" && nzero == 0) 68 { 69 ch1 = str1.Substring(temp * 1, 1); 70 ch2 = str2.Substring(i, 1); 71 nzero = 0; 72 } 73 else 74 { 75 if (str3 == "0" && nzero >= 3) 76 { 77 ch1 = ""; 78 ch2 = ""; 79 nzero = nzero + 1; 80 } 81 else 82 { 83 if (j >= 11) 84 { 85 ch1 = ""; 86 nzero = nzero + 1; 87 } 88 else 89 { 90 ch1 = ""; 91 ch2 = str2.Substring(i, 1); 92 nzero = nzero + 1; 93 } 94 } 95 } 96 } 97 } 98 if (i == (j - 11) || i == (j - 3)) 99 { 100 //如果该位是亿位或元位,则必须写上 101 ch2 = str2.Substring(i, 1); 102 } 103 str5 = str5 + ch1 + ch2; 104 105 if (i == j - 1 && str3 == "0") 106 { 107 //最后一位(分)为0时,加上“整” 108 str5 = str5 + ''; 109 } 110 } 111 if (num == 0) 112 { 113 str5 = "零元整"; 114 } 115 return str5; 116 }

 

转载于:https://www.cnblogs.com/guess/p/6072429.html

使用优化算法,以优化VMD算法的惩罚因子惩罚因子 (α) 和分解层数 (K)。 1、将量子粒子群优化(QPSO)算法与变分模态分解(VMD)算法结合 VMD算法背景: VMD算法是一种自适应信号分解算法,主要用于分解信号为不同频率带宽的模态。 VMD的关键参数包括: 惩罚因子 α:控制带宽的限制。 分解层数 K:决定分解出的模态数。 QPSO算法背景: 量子粒子群优化(QPSO)是一种基于粒子群优化(PSO)的一种改进算法,通过量子行为模型增强全局搜索能力。 QPSO通过粒子的量子行为使其在搜索空间中不受位置限制,从而提高算法的收敛速度与全局优化能力。 任务: 使用QPSO优化VMD中的惩罚因子 α 和分解层数 K,以获得信号分解的最佳效果。 计划: 定义适应度函数:适应度函数根据VMD分解的效果来定义,通常使用重构信号的误差(例如均方误差、交叉熵等)来衡量分解的质量。 初始化QPSO粒子:定义粒子的位置和速度,表示 α 和 K 两个参数。初始化时需要在一个合理的范围内为每个粒子分配初始位置。 执行VMD分解:对每一组 α 和 K 参数,运行VMD算法分解信号。 更新QPSO粒子:使用QPSO算法更新粒子的状态,根据适应度函数调整粒子的搜索方向和位置。 迭代求解:重复QPSO的粒子更新步骤,直到满足终止条件(如适应度函数达到设定阈值,或最大迭代次数)。 输出优化结果:最终,QPSO算法会返回一个优化的 α 和 K,从而使VMD分解效果最佳。 2、将极光粒子(PLO)算法与变分模态分解(VMD)算法结合 PLO的优点与适用性 强大的全局搜索能力:PLO通过模拟极光粒子的运动,能够更高效地探索复杂的多峰优化问题,避免陷入局部最优。 鲁棒性强:PLO在面对高维、多模态问题时有较好的适应性,因此适合海上风电时间序列这种非线性、多噪声的数据。 应用场景:PLO适合用于优化VMD参数(α 和 K),并将其用于风电时间序列的预测任务。 进一步优化的建议 a. 实现更细致的PLO更新策略,优化极光粒子的运动模型。 b. 将PLO优化后的VMD应用于真实的海上风电数据,结合LSTM或XGBoost等模型进行风电功率预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值