c***g 发帖数: 472 | 1 请问bloomberg的那到题目, 给一个数float, 输出char*, 比如12345.67 输出12,345.67
这个题目怎么做? 小数部分怎么处理? 有什么trick和trap的地方?
谢谢了. | s*********t 发帖数: 1663 | 2 int?
67
【在 c***g 的大作中提到】 : 请问bloomberg的那到题目, 给一个数float, 输出char*, 比如12345.67 输出12,345.67 : 这个题目怎么做? 小数部分怎么处理? 有什么trick和trap的地方? : 谢谢了.
| s*****n 发帖数: 350 | 3 sprintf( buf, "%f\n", var) | c***g 发帖数: 472 | 4 sorry, 应该是float
【在 s*********t 的大作中提到】 : int? : : 67
| r****o 发帖数: 1950 | 5 这道题是说整数部分要每3位加一个,么?
小数部分呢?
345.67
【在 c***g 的大作中提到】 : 请问bloomberg的那到题目, 给一个数float, 输出char*, 比如12345.67 输出12,345.67 : 这个题目怎么做? 小数部分怎么处理? 有什么trick和trap的地方? : 谢谢了.
| h*******x 发帖数: 12808 | 6 这个行吗?
【在 s*****n 的大作中提到】 : sprintf( buf, "%f\n", var)
| y**i 发帖数: 1112 | 7 这样允许么?
【在 s*****n 的大作中提到】 : sprintf( buf, "%f\n", var)
| y**i 发帖数: 1112 | 8 小数部分是不是可以这么做?
float a = 12345.67;
float foa = a-(int)a;
const int nfoa = 2;
char szfoa[nfoa+1];
memset(szfoa, 0, nfoa+1);
for (int i = 0; i < nfoa; ++i)
{
foa *= 10;
szfoa[i] = '0'+(int)foa;
foa -= (int)foa;
}
if ((int)(foa*10) > 4)
++szfoa[nfoa-1];
345.67
【在 c***g 的大作中提到】 : 请问bloomberg的那到题目, 给一个数float, 输出char*, 比如12345.67 输出12,345.67 : 这个题目怎么做? 小数部分怎么处理? 有什么trick和trap的地方? : 谢谢了.
| h*******x 发帖数: 12808 | 9 float能简单一些,要是double就麻烦一些吧。
345.67
【在 c***g 的大作中提到】 : 请问bloomberg的那到题目, 给一个数float, 输出char*, 比如12345.67 输出12,345.67 : 这个题目怎么做? 小数部分怎么处理? 有什么trick和trap的地方? : 谢谢了.
| w******1 发帖数: 520 | | w******1 发帖数: 520 | 11 用规则表达式可以么?
\d+(d{3})+.\d+
然后把group用, 分开打印? | f**r 发帖数: 865 | 12 我觉得是这样做:
1. 用个floor function把整数部分和小数部分分开。
2. 整数部分除10,余数就是最低位。然后把剩下的结果再除10,直到除尽得到最高位
。反过来打印,每三位加入逗号。
3. 小数部分乘10,得到的整数部分就是小数部分的最高位。然后把剩下的结果再乘10
,直到达到要求的精度。
完毕。 | m****u 发帖数: 3915 | 13 正解
10
【在 f**r 的大作中提到】 : 我觉得是这样做: : 1. 用个floor function把整数部分和小数部分分开。 : 2. 整数部分除10,余数就是最低位。然后把剩下的结果再除10,直到除尽得到最高位 : 。反过来打印,每三位加入逗号。 : 3. 小数部分乘10,得到的整数部分就是小数部分的最高位。然后把剩下的结果再乘10 : ,直到达到要求的精度。 : 完毕。
|
|