我想了解%gdouble的格式说明符何时开始以指数格式打印值.
myTest.c
#include <stdio.h>
int main() {
double val = 384615.38462;
double val2 = 9999999;
printf ("val = %g\n",val);
printf ("val2 = %g\n",val2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用gcc编译:
gcc version 4.5.2 (GCC)
Target: i386-pc-solaris2.11
Run Code Online (Sandbox Code Playgroud)
输出:
val = 384615
val2 = 1e+07
Run Code Online (Sandbox Code Playgroud)
问题:为什么val打印为整数,为什么val2即使我没有使用%lf过也会转换为指数格式printf.
是否有从使用指数格式开始打印值的范围?如果是的话,我们有什么办法可以猜出价值区间是什么?
提前致谢.
我在德国语言环境中安装了一台linux机器.当我在perl中打印float/double时,我希望它以昏迷分开打印而不是点分开.但它没有发生.任何的想法 ?
[root@IDCDVAM886 ~]# uname -a
Linux IDCDVAM886 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@IDCDVAM886 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
[root@IDCDVAM886 ~]# locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8
[root@IDCDVAM886 ~]# echo $LC_ALL
de_DE.UTF-8
[root@IDCDVAM886 ~]# echo $LC_NUMERIC
de_DE.UTF-8
[root@IDCDVAM886 ~]# cat my.pl
#!/usr/bin/perl
use locale;
print "LC_NUMERIC = $ENV{LC_NUMERIC}\n";
print 5/2 ;
print "\n";
my $val = 2,5; …Run Code Online (Sandbox Code Playgroud)