sprintf格式化double型,为什么小数点而变成逗号

hotheartlewis 2009-06-10 05:49:32
标准c,

char str1[50];
char str2[50];

double d1=6789;
sprintf(str1, "%f", d1);

可是当我把这个str1打印出来看的时候竟然是6789,000000
sprintf(str2, "%10.3f", d1);
str2=" 6789,000"

逗号怎么会替换小数点作为分隔符了呢?
怎么会是这样,以前是可以的呀。
...全文
2883 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotheartlewis 2009-06-29
  • 打赏
  • 举报
回复
运行一直正常,现在结帖吧!
hotheartlewis 2009-06-16
  • 打赏
  • 举报
回复
感谢各位的回复。这几天很忙,没顾得上更新状况。
我的操作系统是英文的,Regional and Language Options->Regional Options->Customize中的设置如下:

Decimal symbol:.
Digital grouping symbol:,
List seperator:,
format->English(United States)
Location->United States.
我觉得这个设置没错呀,而且这个设置和我的运行机器的设置是完全一样的,不知为什么不行!

我现在加了setlocale,已经运行正常了,但其中的机理搞不清楚。
光宇广贞 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 pathuang68 的回复:]
引用楼主 hotheartlewis 的帖子:
应该是地区选择的问题。在欧洲比如德国和瑞士,我们的小数1,234.56在他们那里被写成1.234,56。千分位和小数点和我们的刚好反过来。

我们follow了美国的习惯。
[/Quote]

pathuang68 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 hotheartlewis 的帖子:]
标准c,

char str1[50];
char str2[50];

double d1=6789;
sprintf(str1, "%f", d1);

可是当我把这个str1打印出来看的时候竟然是6789,000000
sprintf(str2, "%10.3f", d1);
str2=" 6789,000"

逗号怎么会替换小数点作为分隔符了呢?
怎么会是这样,以前是可以的呀。
[/Quote]
应该是地区选择的问题。在欧洲比如德国和瑞士,我们的小数1,234.56在他们那里被写成1.234,56。千分位和小数点和我们的刚好反过来。

我们follow了美国的习惯。
arong1234 2009-06-11
  • 打赏
  • 举报
回复
在vc里,所有不定参数中的浮点数都当double,%f,%lf一样
[Quote=引用 23 楼 zyzy257 的回复:]
不是应该用sprintf(str, "%lf", d1)的吗?
[/Quote]
勤奋的沉沦 2009-06-11
  • 打赏
  • 举报
回复
不是应该用sprintf(str, "%lf", d1)的吗?
greenbit 2009-06-11
  • 打赏
  • 举报
回复
无奇不有啊...
goodname 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 qduwg 的回复:]
我冒险设置了一下我的控制面板里面的“区域设置”,把.改为,

我重新运行楼上的程序,发现依然是正确的,小数点依然还是小数点啊。

我的是英文版XP,英文版VC6。
[/Quote]

我不知道是否应该重新启动才能生效;因为不清楚具体原理,纯属猜测。
但是我在18楼帖出的步骤是可以看到效果的。
青岛芒果 2009-06-11
  • 打赏
  • 举报
回复
我冒险设置了一下我的控制面板里面的“区域设置”,把.改为,

我重新运行楼上的程序,发现依然是正确的,小数点依然还是小数点啊。

我的是英文版XP,英文版VC6。
ex_dijkstra 2009-06-11
  • 打赏
  • 举报
回复
长见识
ForestDB 2009-06-11
  • 打赏
  • 举报
回复
检查下Control Panel下的Regional and Language Options。
wmjcnn 2009-06-11
  • 打赏
  • 举报
回复
出现这种问题,与程式本身设计应该是没有关系的.可能你的系统默认设置文件输出为千分位格式了.
具体调试哪个地方我不是很清楚.
ameyume 2009-06-11
  • 打赏
  • 举报
回复
长见识
SoRoMan 2009-06-11
  • 打赏
  • 举报
回复
为什么不看看sprintf的实现呢?看了实现你就会发现它是个locale dependent的函数。
ji2feng 2009-06-11
  • 打赏
  • 举报
回复
过路
linren 2009-06-11
  • 打赏
  • 举报
回复
原来如此……
学习到了
陽洸膂珵 2009-06-11
  • 打赏
  • 举报
回复
sprintf(str1, "%f", (float)d1);
woneedjob 2009-06-11
  • 打赏
  • 举报
回复
UP
性能侠客行 2009-06-10
  • 打赏
  • 举报
回复
VC6测试正常,
楼主是啥编译器?
breezes2008 2009-06-10
  • 打赏
  • 举报
回复
sprintf(str1, "%f", (float)d1);
加载更多回复(20)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧