这似乎是一个愚蠢的问题,但是string.format中用于字符串替换的符号是什么?有人能指出一个如何使用它的简单例子吗?
我从HexConverter中获取了以下代码- 统一社区Wiki
string hex = color.r.ToString("X2") + color.g.ToString("X2") + color.b.ToString("X2");
Run Code Online (Sandbox Code Playgroud)
这给了我一个例外:
FormatException: The specified format 'X2' is invalid
Run Code Online (Sandbox Code Playgroud)
我尝试使用,"D"但即使这样也犯了错误.唯一有效的是"F格式化浮点数.
转到声明显示汇编浏览器中的mscorlib.dll/System/Single.ToString(字符串) - 到目前为止听起来不错.
谷歌搜索monodevelop字符串格式十六进制或类似的搜索字符串没有显示有关MonoDevelop限制的任何有趣的东西.
那么有什么准备,初始化,...之前我可以得到一个简单的十六进制值转换?
[更新] 颜色是Unity中的结构:
public struct Color
{
public float r;
public float g;
public float b;
// ...
Run Code Online (Sandbox Code Playgroud)
采取dtb的答案我终于使用它:
int r = (int)(color.r * 256);
int g = (int)(color.g * 256);
int b = (int)(color.b * 256);
string hex = string.Format ("{0:X2}{1:X2}{2:X2}", r, g, b);
Run Code Online (Sandbox Code Playgroud)
所以我错过了Color …
我使用以下代码在我的应用程序的状态栏中显示任务的已用时间.
public void DisplayDuration(TimeSpan duration)
{
string formattedDuration;
if (duration.TotalMilliseconds < 2000)
formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds);
else if (duration.TotalSeconds < 60)
formattedDuration = string.Format("{0} sec", duration.TotalSeconds);
else
formattedDuration = string.Format("{0} min", duration.TotalMinutes);
this.TimingLabel.Text = formattedDuration;
}
Run Code Online (Sandbox Code Playgroud)
this.TimingLabel是winform页脚中statusStrip控件中的标签.
但是我在Windows XP和Windows 7上得到了完全不同的结果
Windows XP:

Windows 7的

为什么单位出现在Windows 7之前?
我已检查区域设置两台计算机都设置为美国,具有相同的日期时间格式.非常确定它是在两台机器上运行的相同代码.在一些非常简单的代码中,这是非常奇怪的行为.
作为后续跟进:我对我的代码进行了以下更改,但仍然存在同样的问题:
formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds.ToString());
Run Code Online (Sandbox Code Playgroud) 我想在我的窗口标题中连接我的viewmodel中的属性和来自资源文件的值.这是我没有来自资源的字符串工作:
Title="Binding Path=Description, StringFormat=Building: {0}}"
Run Code Online (Sandbox Code Playgroud)
现在我想删除"Building"字符串,并从我在其他地方使用的资源中输入一个值:
xmlns:res="clr-namespace:Project.View.Resources"
{res:Strings.TitleDescription}
Run Code Online (Sandbox Code Playgroud)
我怎样才能定义两者?我可以定义为{1}参数吗?
问题出在Python 2.6上,这就是我们在生产中所拥有的.
我有这个要求用逗号格式化数字(如1234567.0987或1234567.0),以及小数点后指定的位数.因此,如果精度为3,则1234567.0987可能看起来像1,234,567.099.
我尝试使用Locale,正如许多问题的答案所示,问题是小数点后产生两位数,这对我的要求是不可接受的.
我尝试在其他地方搜索,但没有找到任何解决方案,最后我自己创建了一个方法:
def format_float(value, precision = 4):
formatString = "%0." + str(precision) + "f"
str_val = formatString % value
first, second = str_val.split('.')
first = int(first)
group = []
while True:
result, mod = first / 1000, first % 1000
group.append(str(mod))
if result == 0:
break
first = result
group.reverse()
return ','.join(group) + '.' + second
Run Code Online (Sandbox Code Playgroud)
我试图运行一些测试来测试该方法,它工作正常:
# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == …Run Code Online (Sandbox Code Playgroud) 我有一个构造函数,它接受一个DateTime对象:
public Report(DateTime date, string start = "0", string end = "0")
{
Logger.Info("Creating a new Report...");
StartTime = start;
EndTime = end;
Date = date.ToString("YYYY-mm-dd");
SetStartEndTimes();
Logger.Info("Report Created");
}
Run Code Online (Sandbox Code Playgroud)
现在,这只是3天前工作正常.但是,我休息后今天回来,这是我看到的结果:

如您所见,传入的日期是正确的.但是,在格式之后,它不是.再次,这在我休息之前有效.我回来了,我明白了.我错过了什么吗?为什么从开始工作后它的格式如此错误?
编辑
多谢你们.混乱的部分正在查看以前版本的源代码控制,这很有用.或许我想象它有效.我不知道.但这种方式已经持续了大约3个月.
我有成千上万行的python代码有python2.7 +样式字符串格式化(例如{} s中没有索引)
"{} {}".format('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
我需要在python2.6下运行此代码,python2.6 需要索引.
我想知道是否有人知道一个无痛的方式允许python2.6运行此代码.如果有一个"来自__future__ import blah"解决问题,那就太棒了.我没有看到一个.这些方面的东西将是我的第一选择.
一个遥远的第二个是一些脚本可以自动化添加索引的过程,至少在明显的情况下:
"{0} {1}".format('foo', 'bar')
Run Code Online (Sandbox Code Playgroud) 我有一个包含'%'的默认值,我也将其插入到我的参数的帮助文档中.例如:
default = "5% foo"
animrender_group.add_argument(
"--foo",
default=default,
help="Foo amount. Default: %s" % default,
)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
parse_args()上的Argparse错误
[snip]
args = parser.parse_args()
[snip]"../python2.5/site-packages/argparse.py", line 622, in _expand_help
return self._get_help_string(action) % params
ValueError: unsupported format character 'O' (0x4f) at index 83
Run Code Online (Sandbox Code Playgroud) 我一直在使用新的f-string格式检查我的一些字符串格式选项.我经常需要解压缩列表和其他未知长度的迭代.目前我使用以下...
>>> a = [1, 'a', 3, 'b']
>>> ("unpack a list: " + " {} "*len(a)).format(*a)
'unpack a list: 1 a 3 b '
Run Code Online (Sandbox Code Playgroud)
这虽然有点麻烦,但使用3.6之前的格式表示法.考虑到运行时字符串连接,新的f-string格式选项很有意思.这是我遇到问题的{}数量的复制.在我之前的例子中,我只是创建了必要的结构并在.format()部分中解压缩.
尝试这样做产生了一个有效的变体,但是,我不能将两个花括号放在一起,或者它不能解包...
(1)
>>> 'unpack a list' f' {{*a}}'
'unpack a list {*a}'
Run Code Online (Sandbox Code Playgroud)
按下,我在内部{}对周围插入了一个空格.这是一个适度的改进,但是开始和结束{,}存在.
(2)
>>> 'unpack a list' f' { {*a} }'
"unpack a list {1, 3, 'a', 'b'}"
Run Code Online (Sandbox Code Playgroud)
将变体拼接成一个封闭的f-string使外观和语法更好,因为评估显然是从左到右.然而,这仍然留下了封闭的花括号.
(3)
>>> f'unpack a list { {*a} }'
"unpack a list {1, 3, 'a', 'b'}"
Run Code Online (Sandbox Code Playgroud)
也许,我正在过度思考整个过程,并希望采用某种形式的自动拆包.这只是产生了列表表示,大括号被[]替换.
(4)
>>> f'unpack a list {a}'
"unpack a …Run Code Online (Sandbox Code Playgroud) 我有一个变量n,我想打印n个小数位。
import math
n = 5
print(f"{math.pi:.nf}")
Run Code Online (Sandbox Code Playgroud)
ValueError: Format specifier missing precision
这行不通,但是怎么做呢?
python ×5
c# ×3
argparse ×1
backport ×1
binding ×1
f-string ×1
lua ×1
monodevelop ×1
python-2.6 ×1
python-3.6 ×1
python-3.x ×1
string ×1
windows-7 ×1
windows-xp ×1
wpf ×1