我String.Format("{0:C2}", -1234)用来格式化数字.
它总是将数量格式化为正数,而我希望它变为$ - 1234
我想在字符串中显示两个日期之间的经过时间.
假设我有以下代码:
DateTime date1 = DateTime.Now();
System.Threading.Thread.Sleep(2500);
DateTime date2 = DateTime.Now();
TimeSpan elapsed = date2.substract(date1);
Console.WriteLine("> {0:hh:mm:ss}", elapsed);
Run Code Online (Sandbox Code Playgroud)
我期待的是:
> 00:00:03
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
> 00:00:02.5002500
Run Code Online (Sandbox Code Playgroud)
有没有办法使用String.Format函数只返回完整秒?
我还尝试删除小数位:
elapsed = elapsed.Substract(TimeSpan.FromMiliseconds((double)Timespan.Miliseconds);
Run Code Online (Sandbox Code Playgroud)
但是,自从elapsed以来,这都不起作用.Miliseconds返回500作为整数.
我正在使用.NET 3.5编译C#并尝试将TimeSpan转换为字符串并格式化字符串.我想用
myString = myTimeSpan.ToString("c");
但是在TimeSpan.ToString.NET 4.0和我使用.NET 3.5之前,该方法不会将格式字符串作为参数.
那么你如何将TimeSpan格式化为字符串?我的最终目标是以格式显示TimeSpan,hh:mm:ss但目前正在接收hh:mm:ss:fffffff.
我试过用
myString = string.Format("{0:hh:mm:ss}", myTimeSpan);
但是string.Format只是格式化我的DateTime,并且在尝试格式化TimeSpan时传递不同的格式字符串不起作用.
为了连接,String我们经常使用StringBuilder而不是String+ String,但我们也可以String.format通过给定的语言环境,格式和参数来返回格式化的字符串.
例子:
使用StringBuilder连接字符串
String concatenateStringWithStringBuilder(String name, String lName, String nick) {
final StringBuilder sb = new StringBuilder("Contact {");
sb.append(", name='").append(name)
.append(", lastName='").append(lName)
.append(", nickName='").append(nick)
.append('}');
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
使用StringFormat连接字符串:
String concatenateStringWithStringFormat(String name, String lName, String nick) {
return String.format("Contact {name=%s, lastName=%s, nickName=%s}", name, lName, nick);
}
Run Code Online (Sandbox Code Playgroud)
在性能方面,String.Format效率如何StringBuilder?哪一个更好地连接字符串,为什么?
UPDATE
我检查了类似的问题,但没有回答我的问题.到目前为止,我已经习惯StringBuilder连接字符串,我应该使用它吗?或者我应该使用String.format?问题是哪个更好,为什么?
任何人都可以解释以下任何一种方法是否有任何好处:
decimal d = 12.0m;
// 1. how I'd have done it
myLabel.Text = d.ToString();
// 2. how I saw someone do it today
myLabel.Text = String.Format("{0}", d);
Run Code Online (Sandbox Code Playgroud)
只是为了澄清,我不是在质疑这些方法的作用,我显然对此感到高兴,就好像在这个具体的例子中,在一个方面可能有一个性能优势.我知道string.format()提供的文化和格式增加了灵活性,但我总是只是'tostring()'数字来将它们的值附加到标签或一般的基于文本的属性.
对我来说,string.format()选项似乎更多的打字,这里没有额外的好处,但我想知道是否有任何其他'引擎盖'的好处,一种方式与另一种方式.
我正在尝试在C#中使用String.Format("{0:c}",somevalue),但我很难搞清楚如何配置输出以满足我的需求.以下是我的需求:
我已经尝试过String.Format("{0:c}",somevalue)但是对于零值,它输出$ 0.00这不是我想要的.我也尝试过String.Format("{0:$ 0,0.00; $(0,0.00);#}","somevalue",但对于1.0,它输出$ 01.00.String.Format("{0:$ 0.00; $(0.00);#}",somevalue)适用于大多数情况,但当somevalue为1000.00时,输出为$ 1000.00.
是否有适合所有5个案例的格式?我阅读的所有文档仅详细介绍了基础知识,并未涉及此类方案.
输入: uint hex = 0xdeadbeef;
所需输出: string result = "{deadbeef}"
第一种方法:明确添加{和}; 这工作:
result = "{" + string.Format("{0:x}", hex) + "}"; // -> "{deadbeef}"
Run Code Online (Sandbox Code Playgroud)
使用转义大括号输出为十进制而不是十六进制:
result = string.Format("{{{0}}}", hex); // -> "{3735928559}"
Run Code Online (Sandbox Code Playgroud)
似乎很有希望,现在我们需要做的就是:x按照上面的第一种方法添加十六进制说明符:
result = string.Format("{{{0:x}}}", hex); // -> "{x}"
Run Code Online (Sandbox Code Playgroud)
哦,亲爱的,添加它':x已经使它输出"{x}"而不是"{deadbeef}"我想要的.
所以我的问题是:我必须通过显式添加{和}按照第一个示例来解决这个问题,或者有没有办法使用复合格式化并转义大括号?
另请注意,这也会影响字符串插值(毕竟)只是由编译器转换为调用string.Format().
(这可能是重复的问题,但到目前为止我一直无法找到重复...)
编辑
我正在寻找一种方法来为或使用命名参数.sprintfprintf
例:
sprintf(
'Last time logged in was %hours hours,
%minutes minutes, %seconds seconds ago'
,$hours,$minutes, $seconds
);
Run Code Online (Sandbox Code Playgroud)
或通过vsprintf和一个关联数组.
我在这里找到了一些编码示例
function sprintfn ($format, array $args = array())
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/de/function.sprintf.php
和这里
function vnsprintf( $format, array $data)
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/de/function.vsprintf.php
人们写自己的解决方案.
但我的问题是,是否有可能有一个标准的PHP解决方案来实现这一点,还是有另一种方式,也许是由PEAR提供的简单的PHP模板,我可以通过坚持标准的PHP实现这一点?
谢谢你的帮助.
我一直在开发一个.NET字符串格式库来协助应用程序的本地化.它被称为SmartFormat,在GitHub上是开源的.
它试图解决的一个问题是语法数字.这也被称为"单数和复数形式"或"条件格式",这里有一个英文版的片段:
var message = "There {0:is|are} {0} {0:item|items} remaining";
// You can use the Smart.Format method just like using String.Format:
var output = Smart.Format(CultureInfo.CurrentUICulture, message, items.Count);
Run Code Online (Sandbox Code Playgroud)
我相信英国的规则是,有2种形式(单数和复数)可以应用于名词,动词和形容词.如果数量是1单数,则使用,否则使用复数.
我现在正试图通过实施其他语言的正确规则来"开阔视野"!我已经明白,某些语言最多可以包含4种复数形式,并且需要一些逻辑来确定正确的形式.我想扩展我的代码以适应多种语言.例如,我听说俄语,波兰语和土耳其语的规则与英语完全不同,所以这可能是一个很好的起点.
但是,我只会说英语和西班牙语,那么如何确定许多常用语言的正确语法规则呢?
编辑:我也想知道我的单元测试的一些好的非英语"测试短语":什么是一些非常好的非英语短语,有单数和复数形式可用于测试国际化和本地化库?
毫无疑问,我错过了一些非常明显的东西,但我无法弄明白.任何帮助,将不胜感激.错误来自这里:
package B00166353_Grades;
public class Student{
String name,banner;
public Student(String name,String banner){
this.name=name;
this.banner=banner;
}
public String toString(){
String productDetails=new String();
productDetails+=String.format("%-20s%10.2s%10s",this.name,this.banner);
return productDetails;
}
}
Run Code Online (Sandbox Code Playgroud)