我正在使用一个API来获取加密货币(https://api.coinmarketcap.com/v1/ticker/?convert=USD)的数据,正如你们中的一些人可能知道的,加密货币的价值可能超过4000美元(BTC),或者对于其他一些货币,可能低于0.000001美元。我必须工作,轻松地比较所有这些数字。你知道吗
在加拿大,我们使用空格字符作为千位分隔符。我希望它能对成千上万的人起作用,但也能对小数位数进行分组。另外,我需要一种方法,只保留一些重要的数字。以比特币为例,我不想要小数部分。我希望总是有至少4个有效数字,这基本上意味着,如果number >= 1000
,我不需要小数部分(但我保留完整的整数部分),如果是< 0
,我希望在第一个非零数字之后至少有3个额外的数字(如果需要的话,可以四舍五入)。你知道吗
输入示例=>;我想要的输出:
65410845186.1 => 65 410 845 186
43245.1 => 43 245
285.1234 => 285.1
0.01234567 => 0.123 5
0.001234054 => 0.001 234
0.001034538 => 0.001 035
0.00010001 => 0.000 100 0
1 => 1.000
1.0006 => 1.001
脚本需要在不同的操作系统上工作。我不认为任何locale
或琐碎的format
实现可以在这里工作。在保留4位有效数字(必要时进行舍入)的同时,用一个点作为十进制分隔符,以两种方式添加空格分隔符的最佳方法是什么?除了保留整数部分的数字>= 1000
?你知道吗
我从StackOverflow上找到的另一段代码中使用了空间分隔符作为千位分隔符:
def splitThousands(s, tSep=' ', dSep=','):
if s.rfind('.')>0:
rhs=s[s.rfind('.')+1:]
s=s[:s.rfind('.')]
if len(s) <= 3: return s + dSep + rhs
return splitThousands(s[:-3], tSep) + tSep + s[-3:] + dSep + rhs
else:
if len(s) <= 3: return s
return splitThousands(s[:-3], tSep) + tSep + s[-3:]
但是,它不考虑有效位数,也不为小数部分添加分隔符。你知道吗
注意:这些值波动很大,我确实不介意非常极端的情况,1.0004999999999
的浮点值会四舍五入到1.001
。你知道吗
不完全是一个干净或直接的解决方案,但这里有一个适合的功能:
输出:
相关问题 更多 >
编程相关推荐