如何创建将Dart
中带有字符的大数转换成短数的函数?
喜欢
1000 => 1K
10000 => 10K
1000000 => 1M
10000000 => 10M
1000000000 => 1B
答案 0 :(得分:1)
def func1(func):
def func2():
print("Before func2")
func()
print("After func2")
return func2()
@func1
def func_d():
print("I am being decorated")
func_d()
答案 1 :(得分:1)
如果只需要后缀,则是一种更简单的方法。它可能没有进行编译,但这就是想法。
String getSuffix (int t)
{
int i = -1;
for ( ; (t /= 1000) > 0 ; i++ );
return ['K','M','B'][i];
}
修改
这是执行此操作的数学方法,并且可以编译。关键是要搜索“三位小数的组”位数:
,依此类推。这是日志 1000 编号。
String getSuffix (int num)
{
int i = ( log(num) / log(1000) ).truncate();
return (num / pow(1000,i)).truncate().toString() + [' ','K','M','B'][i];
}
答案 2 :(得分:1)
Intl软件包将其作为“紧凑”数字来实现,但是它具有固定的格式,并且还会随不同的语言环境而变化,这可能是您想要的,也可能不是您想要的。
答案 3 :(得分:0)
创建一个类并在任何地方使用其静态方法。
class NumberFormatter{
static String formatter(String currentBalance) {
try{
// suffix = {' ', 'k', 'M', 'B', 'T', 'P', 'E'};
double value = double.parse(currentBalance);
if(value < 1000){ // less than a thousand
return value.toStringAsFixed(2);
}else if(value >= 1000 && value < (1000*100*10)){ // less than a million
double result = value/1000;
return result.toStringAsFixed(2)+"k";
}else if(value >= 1000000 && value < (1000000*10*100)){ // less than 100 million
double result = value/1000000;
return result.toStringAsFixed(2)+"M";
}else if(value >= (1000000*10*100) && value < (1000000*10*100*100)){ // less than 100 billion
double result = value/(1000000*10*100);
return result.toStringAsFixed(2)+"B";
}else if(value >= (1000000*10*100*100) && value < (1000000*10*100*100*100)){ // less than 100 trillion
double result = value/(1000000*10*100*100);
return result.toStringAsFixed(2)+"T";
}
}catch(e){
print(e);
}
}
}