数字转换为W,K,结尾,并可指定长度(仅供参考,个人测试使用。)

功能:

数字转换为W,K,结尾,并可指定长度

举例:

输入:3141592653 
输出:3.14159B   --5
输出:3.14B         --2

效率:

请忽略,简单实现,后续优化修改算法。

实现:C++版本

 1 #include "iostream"
 2 #include "string"
 3 #include "cstdlib"
 4 
 5 //功能:传入一数值和需保留小数点后的位数,生成指定数值。
 6 
 7 using namespace std;
 8 
 9 //格式化数字字符串  eg:%.1f格式为%.lenf
10 string getFloatSubStrByLen(int len){
11     char initStr[32] = "0.0";
12     sprintf_s(initStr, 32, "%%.%df", len);
13     return initStr;
14 }
15 
16 //返回要保留指定len位的小数。
17 string getFloatNumByLen(double nums, int len){
18     if (len < 0){
19         throw -1;
20     }
21     else{
22         char numStr[32] = "0.0";
23         string numSubStr = getFloatSubStrByLen(len);
24         sprintf_s(numStr, 32, numSubStr.c_str(), nums);
25         return numStr;
26     }
27 }
28 
29 //改变数字显示样式
30 string getFinalStyle(double nums, int len)
31 {
32     if (len < 0){
33         throw - 1;
34     }
35     else{
36         string numsChar = "0.0";
37         if (nums>1000000000)
38         {
39             numsChar = getFloatNumByLen(nums / 1000000000, len);
40             numsChar += "B";
41         }
42         else if (nums>1000000)
43         {
44             numsChar = getFloatNumByLen(nums / 1000000, len);
45             numsChar += "M";
46         }
47         else if (nums>10000)
48         {
49             numsChar = getFloatNumByLen(nums / 10000, len);
50             numsChar += "W";
51         }
52         else if (nums>1000)
53         {
54             numsChar = getFloatNumByLen(nums / 1000, len);
55             numsChar += "K";
56         }
57         return numsChar;
58     }
59 }
60 
61 //打印日志
62 template void printData(T data){
63     cout << data << endl;
64 }
65 
66 int main()
67 {
68     double nums = 3141592653;
69     string numsChar = getFinalStyle(nums, 5);
70     printData(numsChar.c_str());
71 
72     numsChar = getFinalStyle(nums, 2);
73     printData(numsChar.c_str());
74 
75     system("pause");
76     return 0;
77 }

 

你可能感兴趣的:(数字转换为W,K,结尾,并可指定长度(仅供参考,个人测试使用。))