在 C/C++ 中将天文数字转换为人类可读的形式
我的程序打印出巨大的数字 - 比如 100363443,高达一万亿 - 并且很难阅读它们,所以我想以易于阅读的形式打印任何数字。
现在我使用
printf ("%10ld", number);
格式
我希望使用 printf 得到结果数字。我的大部分代码是 C++ 但我不想引入 std::cout,因为我已经有了 printf
谢谢
My program prints out HUGE numbers - like 100363443, up to a trillion -- and it sort of hard to read them, so I would like to print any number in easy to read form.
right now I use
printf ("%10ld", number);
format
I would appreciate a resulting number using printf. Most of my code is c++ yet I don't want to introduce std::cout, as I already have printf
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您有可用的选项并且不介意失去一点可移植性,请在 printf 格式字符串中使用非标准的撇号标志。
根据我的文档,
'
标志可用于 POSIX 系统自 1997 年以来。如果您使用的是 Unix、Linux、Mac...,您应该没有问题
如果您使用的是 Windows、DOS、iSeries、Android...则一切皆有可能(但也许您可以在系统中安装 POSIX 层)。
在我的系统上,该程序生成:
Use the non-standard
apostrophe
flag in the printf format string, if you have that option available and don't mind losing a little bit of portability.According to my documentation, the
'
flag is available for POSIX systems since 1997.If you are on Unix, Linux, Mac, ... you should have no problem
If you are on Windows, DOS, iSeries, Android, ... all bets are off (but maybe you can install a POSIX layer to your system).
On my system this program produces:
您可以使用 humanize_number() ,它使用 k、m 等后缀来省略低位数字。这不是标准例程,因此您应该下载我链接到的来源。 (2 条款 BSD 许可证,允许任何类型的使用。)
Humanize_number 手册页< /a>.
Humanize_number 源代码,来自 NetBSD。
这是通过添加后缀来实现的,如下所示:
You could use humanize_number() which uses suffixes like k, m, etc., to leave out low order digits. This is not a standard routine, so you should d/l the source I have linked to. (2-clause BSD license, allows any kind of use.)
Humanize_number man page.
Humanize_number source code from NetBSD.
This works by appending suffixes as follows:
简单的方法可能是在输出之前转换为双精度并使用 %e 这将以指数科学计数法打印它们。试试这个:
Easy way might be to convert to a double just before output and use %e which will print them in exponential scientific notation. Try this:
请注意,该数字是一个浮点
编辑:或者如果您不喜欢科学,我在网上找到了这个:
编辑2:正如杰瑞所指出的,您不需要上面的逗号类,这本身似乎就足够了(尽管可能有些语言环境根本不格式化大数字?):
note that the number is a float
EDIT: or if you don't like scientific I found this on the net:
EDIT 2: As pointed out by Jerry you don't need the comma class as above, this seems sufficient by itself (although there are presumably locales which don't format large numbers at all?):
请记住本地化(特别是如果您正在编写库)。
在欧洲(英国除外),则为 1.000.000,而不是 1,000,000
Remember localization (especiallyif you are writing a library).
In europe (except the UK) it would be 1.000.000 rather than 1,000,000
这是我直接用 C 语言编写的一个示例,不使用语言环境。只对积极的一面起作用。 (来自“DiscoVlad”的帮助)
Here is an example I wrote in straight C w/o using locale. Only works for positives. (Much help from "DiscoVlad")