功能:
数字转换为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<typename T> 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 }