我如何格式化1000000
要1.000.000
在Python?在哪里'.' 是十进制标记千位分隔符.
当clang编译以下行时,g ++ 6.1会抱怨数字分隔符(请参阅Coliru上的实例):
auto time = 01'23s;
Run Code Online (Sandbox Code Playgroud)
根据C++ 14标准(N3796),哪个编译器(如果有)是正确的?
否则,允许数字分隔符(§2.14.2)只是<chrono>
库的用户定义文字(§2.14.8)中的实现细节(§20.12.5.8)?恕我直言,它应该不是,因为这些文字是在unsigned long long
参数上定义的.
我记得Howard Hinnant10'000s
在他的CppCon 2016演讲"A <chrono>
tutorial"(在他的演讲中大约42分钟)中作为一个例子.
(请注意,我不打算编码"1分23秒",这只是偶然的,因为八进制文字0123是64 + 16 + 3 == 83.为此我应该写
auto time = 1min + 23s;
Run Code Online (Sandbox Code Playgroud)
但是这种可能误导性的解释不是问题的一部分.)
c++ language-lawyer user-defined-literals c++14 digit-separator
C++ 14将数字分隔符的概念引入文字中3'141'592'653'589
.现在这是可读代码的一个很棒的功能,但我想知道它是否允许在0x/0b
-type文字的数字部分之前引用.在我看来,这:
unsigned int topThreeBits = 0b'1110'0000;
unsigned int hexNum = 0x'dead'beef;
Run Code Online (Sandbox Code Playgroud)
比没有前导分隔符的那个更可读:
unsigned int topThreeBits = 0b1110'0000;
unsigned int hexNum = 0xdead'beef;
Run Code Online (Sandbox Code Playgroud)
因为它清楚地描述了数字的基数.
由于我还没有C++ 14编译器,我需要以这样或那样的方式确认它是否允许这样做.
我知道对于未加前缀的数字没有意义'123'456
,特别是因为解析器不知道它是char
变量还是数字文字.
但是,对于带前缀的文字,我看不出有关令牌在第一次'
到达时的意图有什么混淆- 0x/0b
已经说明它将是一个数字文字.
我想更改千位分隔符,以便{:,}.format(1234)
在Python中使用不同的字符.分隔符应该是'\u066c'
.
如何在不影响任何其他本地设置的情况下设置此项?
编辑:欢迎使用固定字体的任何其他建议的无效分隔符!
我已经看到很多问题教导如何使用comma
千位分隔符来做到这一点:
>>> format(1123000,',d')
'1,123,000'
Run Code Online (Sandbox Code Playgroud)
但如果我尝试使用 a dot
,它就会变得疯狂:
>>> format(1123000,'.d')
ValueError: Format specifier missing precision
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的Python内置独立于区域设置的方法可以使其输出'1.123.000'
而不是输出'1,123,000'
?
我已经在“将‘小数点’千位分隔符添加到数字”
上找到了这个答案,但它是手动执行的。它可以更简单,因为format(1123000,'.d')
与语言环境无关吗?或者Python没有内置它?
@Eugene Yamash使用
itertools
可以给你更多的灵活性:Run Code Online (Sandbox Code Playgroud)>>> from itertools import zip_longest >>> num = "1000000" >>> sep = "." >>> places = 3 >>> args = [iter(num[::-1])] * places >>> sep.join("".join(x) for x in zip_longest(*args, fillvalue=""))[::-1] '1.000.000'
我有一个具有以下值的字符串:
$myValue = "1.099,90";
Run Code Online (Sandbox Code Playgroud)
我想用点替换逗号,反之亦然。像这样:
$myNewValue = "1,099.90";
Run Code Online (Sandbox Code Playgroud)
我知道肯定还有其他更好的方法来做到这一点,但我所能得到的是:
$myNewValue = str_replace(",","|",$myValue);
$myNewValue = str_replace(".",",",$myValue);
$myNewValue = str_replace("|",".",$myValue);
Run Code Online (Sandbox Code Playgroud)
这种方式看起来怪怪的,而且有一股难闻的味道!有更干净的方法吗?