小编sco*_*fax的帖子

为什么NSNumberFormatter不删除小数点和尾随零?

我想将unsigned long int转换为NSString,每3个数字用逗号格式化,既不是小数点也不是尾随零.我可以使用NSNumberFormatter将逗号放入NSString中,但由于某种原因,我无法获得小数点和0.

这是我的代码:

NSNumberFormatter *fmtr;
unsigned long int intToBeDisplayed;
intToBeDisplayed = 1234567890;
fmtr = [[[NSNumberFormatter alloc] init] autorelease];
[fmtr setUsesGroupingSeparator:YES];
[fmtr setGroupingSeparator:@","];
[fmtr setGroupingSize:3];
[fmtr setAlwaysShowsDecimalSeparator:NO];
NSLog([fmtr stringFromNumber:[NSNumber numberWithUnsignedLong:intToBeDisplayed]]);
Run Code Online (Sandbox Code Playgroud)

日志显示"1,234,567,890.00",适当地添加逗号但不幸的是不需要的".00".我已尝试使用int而不是unsigned long int,使用较小的整数值,以及来自各种博客的其他构造都无济于事.我非常感谢有关如何从NSString中获取小数点和尾随零的任何建议.

我是Objective-C的新手,在试图解决这个问题的模糊眼睛综合症方面成为老手,但是在那个阶段,在Objective-C中学到的每一点教训和成功都是一个巨大的快乐源泉.

objective-c nsnumberformatter

13
推荐指数
3
解决办法
1万
查看次数

用awk改变字符串的大小写

我是一个awk新手,所以请耐心等待我.

目标是更改字符串的大小写,使每个单词的第一个字母为大写,其余字母为小写.(为了使示例简单,"word"在此定义为严格的字母字符;所有其他字符都被视为分隔符.)

我学会了一种很好的方法,使用以下awk命令从本网站上的另一篇文章中将每个单词的第一个字母大写:

echo 'abce efgh ijkl mnop' | awk '{for (i=1;i <= NF;i++) {sub(".",substr(toupper($i),1,1),$i)} print}' - > Abcd Efgh Ijkl Mnop

通过使用tr命令执行awk命令,可以轻松完成剩余的小写字母:

echo 'aBcD EfGh ijkl MNOP' | tr [A-Z] [a-z] | awk '{for (i=1;i <= NF;i++) {sub(".",substr(toupper($i),1,1),$i)} print}' - > Abcd Efgh Ijkl Mnop

但是,为了更多地了解awk,我想用一个类似的awk结构将除了第一个字母以外的所有字母改为小写.我使用正则表达式\B[A-Za-z]+匹配单词的所有字母但第一个,而awk命令substr(tolower($i),2)以小写形式提供相同的字母,如下所示:

echo 'ABCD EFGH IJKL MNOP' | awk '{for (i=1;i <= NF;i++) {sub("\B[A-Za-z]+",substr(tolower($i),2),$i)} print}' - > Abcd EFGH IJKL MNOP

请注意,第一个单词正确转换,但其余单词保持不变.我将非常感谢解释为什么剩下的单词没有正确转换以及如何让它们这样做.

regex unix awk

10
推荐指数
1
解决办法
1万
查看次数

将位置参数分配给一行中的多个变量

我想知道是否可以将 bash 函数中的位置参数分配给单行中的多个变量。

以下方法有效,但需要多个赋值行:

foo () {
   var1=${1}
   var2=${2}
   var3=${3}
   echo "var1=$var1   var2=$var2   var3=$var3"
}

foo 11 "22 22" 33 # Correct result: var1=11   var2=22 22   var3=33
Run Code Online (Sandbox Code Playgroud)

以下代码在一行中分配输入参数,但它无法正确处理第二个参数:

bar () {
    read var1 var2 var3 <<<"$@"
    echo "var1=$var1   var2=$var2   var3=$var3"
}

bar 11 "22 22" 33 # Incorrect result: var1=11   var2=22   var3=22 33
Run Code Online (Sandbox Code Playgroud)

bash function parameter-passing

5
推荐指数
1
解决办法
1188
查看次数