我尝试使用Formatter.format,但这似乎将尾数留在带有0尾数的数字上,而C版本却没有.在Java中是否有相当于C的%g格式说明符,如果没有,有没有办法伪造它?出于兼容性原因,我的目的是保持尾数与C完全相同.
foo.c的
#include <stdio.h>
int main (int argc, char const *argv[])
{
printf("%g\n", 1.0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Main.java
class Main {
public static void main(String[] args) {
System.out.printf("%g\n", 1.0);
}
}
Run Code Online (Sandbox Code Playgroud)
安慰:
$ javac Main.java && java Main
1.00000
$ gcc foo.c && ./a.out
1
Run Code Online (Sandbox Code Playgroud)
类似地,使用1.2作为输入,Java版本中的尾数较长
$ javac Main.java && java Main
1.20000
$ gcc foo.c && ./a.out
1.2
Run Code Online (Sandbox Code Playgroud) 我需要一个C函数,它返回格式化字符串的最终长度,这样我就可以正确地分配目标字符串,而不是自己计算长度.snprintf由于无法编写整个字符串,这就是其中的一个,但不幸的是,它没有广泛的字符替代品.
swprintf 如果出现错误则返回-1,而不是所需的长度(为什么不是相同的行为?!?)
提到的标题asprintf似乎也没有帮助,因为它只提供非宽版本.
_vscwprintf 可以在Windows上使用,但我需要一个跨平台,标准版本或至少一个Linux版本,我将#ifdef代码.
有任何想法吗?谢谢!
我遇到了一个有趣的性能难题,但在我开始深入研究glibc并在左右中心输入错误之前,我只想获得可能存在的任何洞察力.
我有一个代码,在其中一个函数中执行此操作:
gettimeofday( &tv, 0);
localtime_r( &tv.tv_sec, &local_tm );
char result[25];
strftime( result, 24, "%Y-%m-%d %H:%M:%S", &local_tm);
Run Code Online (Sandbox Code Playgroud)
其余代码与此问题无关.当我用这个替换它:
gettimeofday( &tv, 0);
localtime_r( &tv.tv_sec, &local_tm );
char result[25];
snprintf(result, sizeof(result), "%04d-%02d-%02d %02d:%02d:%02d",
local_tm.tm_year+1900, local_tm.tm_mon+1,
local_tm.tm_mday, local_tm.tm_hour, local_tm.tm_min,
local_tm.tm_sec);
Run Code Online (Sandbox Code Playgroud)
平均而言,我的性能提升了20%.
有没有人碰到这个?这个操作系统特定吗?
有没有办法在Objective-C(甚至C)中的printf样式字符串格式化函数中传递浮点精度参数的变量?例如,在TCL和其他脚本语言中,我可以这样做:
set precision 2
puts [format "%${precision}f" 3.14159]
Run Code Online (Sandbox Code Playgroud)
当然,输出将是3.14.我想在Objective-C中做类似的事情:
float precision = 2
NSString *myString = [NSString stringWithFormat:@".2f", 3.14159]
Run Code Online (Sandbox Code Playgroud)
除了我想将精度包含在变量中.如何才能做到这一点?
我正在尝试为我们的内部开发服务器自动设置站点.
目前,这包括创建系统用户,mysql用户,数据库和apache配置.我知道如何在一个bash文件中完成所有操作,但我想问一下是否有办法更干净地生成apache配置.
基本上我想要做的是生成基于模板的conf文件,类似于使用printf.我当然可以使用printf,但我认为可能有一种更干净的方式,使用sed或awk.
我不只是想使用printf的原因是因为apache配置大约有20行,并且会占用大部分bash脚本,并且使其更难阅读.
任何帮助表示赞赏.
我知道这两个函数都可以用来输出到控制台.
我读了这个问题,但没有人告诉我在输出到控制台时更喜欢使用哪个.那么哪个功能更好,有什么重大差异吗?
新手在这里,但我最终在我的智慧.我已经完成了我的程序,但是在打印时只需要格式化方面的帮助.
if(count == 3)
System.out.printf ("%-15s %15s %15s %15s %15s %n", n, " is compatible with
",dates[k],dates[k+1],dates[k+2]);
Run Code Online (Sandbox Code Playgroud)
我的输出是
Stacey Francis is compatible with Owen Farrell Jack Clifford Joshua Watkins
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是(不重复斯泰西弗朗西斯名称或"兼容":
Stacey Francis is compatible with Owen Farrell
Jack Clifford
Joshua Watkins
Run Code Online (Sandbox Code Playgroud)
只是想知道如何解决这个问题?
谢谢,
科斯蒂
我需要在循环中连接几个字符串并将结果赋值给变量:
格式化字符串示例:
result=$(printf '| %-15s| %-25s| %-15s| %-15s| %-15s\n' $size $name $visits $inbound $outbound);
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,它应该像这样工作:
result=''
while read somevar
do
...
outbound=`cat "$www_path/$name/access.log"|grep \`date +"%d/%b/%Y"\`|awk '{ sum+=$11} END {print sum/1024/1024}'`
result=$(printf '%s| %-15s| %-25s| %-15s| %-15s| %-15s\n' $result $size $name $visits $inbound $outbound);
...
done
echo $result
Run Code Online (Sandbox Code Playgroud)
但它没有:(
UPD:
完整代码列表如下:
www_path='/var/www';
result='';
cd /var/www/; ls -d */ | while read i ; do basename "$i" ; done
while read i;
do du -sh "$i"|
while read size name
do
visits=`cat …Run Code Online (Sandbox Code Playgroud) 我在运行它时在C中重置sprintf的问题时重置计数器变量的值.简而言之,正在发生的事情:
int count = 0;
count++;
printf("%d\n", count); // count will equal 1
char title[7];
sprintf(title, "%.3d.jpg", count);
printf("%d\n", count); // count now equals 0 again
Run Code Online (Sandbox Code Playgroud)
这是sprintf的正常行为吗?
我的代码:
printf("Enter a number : ");
scanf("%d", &number);
printf("%d is what I entered\n", &number);
Run Code Online (Sandbox Code Playgroud)
我输入了2,
预期产量: 2 is what I entered
实际产量: 2293324 is what I entered
这有什么问题?