作者 主題: [Help] 數值處理 ?  (閱讀 6639 次)

0 會員 與 1 訪客 正在閱讀本文。

unitcell

  • 活潑的大學生
  • ***
  • 文章數: 411
    • 檢視個人資料
[Help] 數值處理 ?
« 於: 2003-08-06 20:33 »
Hi all,

我如何把一數值(如:1234567.00)標準輸出至螢幕成為
1,234,567.00 即沒三個為一單位,加一斗號','.

有何函式處理之?

Thanx.

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #1 於: 2003-08-06 22:26 »
什麼語言 ?

unitcell

  • 活潑的大學生
  • ***
  • 文章數: 411
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #2 於: 2003-08-07 10:35 »
引述: "abelyang"
什麼語言 ?

Sorry, C語言 :(

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #3 於: 2003-08-07 10:55 »
那大概只能用字串處理的方式來做了吧 ...
int digit_count;
float t=1234567.89;
char str[80],*dot;
用 atof, sprintf 來轉成字串
sprintf(str,"%f",t);

先找 . 的位置及其前所有位數,
dot=strstr(str,".");
digit_count= dot - str;

這樣後面您應該會了吧...
或許有更好的方法~~這是我直覺的解法..

unitcell

  • 活潑的大學生
  • ***
  • 文章數: 411
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #4 於: 2003-08-07 12:35 »
引述: "abelyang"
那大概只能用字串處理的方式來做了吧 ...
int digit_count;
float t=1234567.89;
char str[80],*dot;
用 atof, sprintf 來轉成字串
sprintf(str,"%f",t);

先找 . 的位置及其前所有位數,
dot=strstr(str,".");
digit_count= dot - str;

這樣後面您應該會了吧...
或許有更好的方法~~這是我直覺的解法..


這需求不是很多嗎?
我想確認的是真無現成的函式可用?
若無可真的要自己來了:(
Thank you.

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #5 於: 2003-08-07 17:34 »
小弟想 , 不知可不可以 c_str() 再迴圈列印 , 然後 i%3 == 0 多列印逗號...

unitcell

  • 活潑的大學生
  • ***
  • 文章數: 411
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #6 於: 2003-08-07 17:41 »
引述: "dark"
小弟想 , 不知可不可以 c_str() 再迴圈列印 , 然後 i%3 == 0 多列印逗號...


c_str()是現成的嗎?

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #7 於: 2003-08-07 17:53 »
x 是字串的話
const char *y=x.c_str();
y 就是字元陣列...

jade-rabbit

  • 鑽研的研究生
  • *****
  • 文章數: 833
  • 性別: 男
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #8 於: 2003-08-08 01:19 »
引述: "abelyang"
那大概只能用字串處理的方式來做了吧 ...
或許有更好的方法~~這是我直覺的解法..


字串處理的確是很直覺的想法^^

printf 有個 ' (單引號) flag 可以用用, 我剛試了一下配合
setlocale(LC_NUMERIC, "");
可以有效耶..呵呵..

好奇之下,我又發現原來
printf("%p", NULL);
printf("%p", "");
是不同的東西
好像還看過有人把 某字串 跟 "" 來 strcmp 耶?這有效果嗎?
--(中也者天下之大本也,和也者天下之達道也)--

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[Help] 數值處理 ?
« 回覆 #9 於: 2003-08-08 10:12 »
引述: "JadeRabbit"
好奇之下,我又發現原來
printf("%p", NULL);
printf("%p", "");
是不同的東西
好像還看過有人把 某字串 跟 "" 來 strcmp 耶?這有效果嗎?


原本 NULL 與 "" 就是不同的東西啊.
字串與 "" 比較也很正常啊, 就是判斷是不是空字串. 比較的是內容而不是指標.
當然, 你如果不是用 strcmp 來比較, 而是用 == 來比較, 那就是看指標一不一樣 (應該是 always false).

%p 是印出指標的位置, 當然不會與 NULL 相同.
如果你高興, 還可以多印出幾個 "" 的指標, 每一個應該都是不一樣的.

jade-rabbit

  • 鑽研的研究生
  • *****
  • 文章數: 833
  • 性別: 男
    • 檢視個人資料
[Help] 數值處理 ?
« 回覆 #10 於: 2003-08-09 01:00 »
代碼: [選擇]

#include <stdio.h>
#include <locale.h>

int main(void)
{
  printf("%p\n", "");
  printf("%p\n", NULL);
  printf("%p\n", "");
  setlocale(LC_NUMERIC, "");
  printf("%'.2ld\n", 1234567);
  printf("%p\n", "");
}

要不要 try try 看上面的結果如何呢?
要判斷空字串,我到認為字串與 "" 比較似乎是多呼叫了 strcmp 。其實只要簡單的判斷字串開頭的內容是否為 0 就可以了呢!
--(中也者天下之大本也,和也者天下之達道也)--

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[Help] 數值處理 ?
« 回覆 #11 於: 2003-08-09 09:42 »
引述: "JadeRabbit"
代碼: [選擇]

#include <stdio.h>
#include <locale.h>

int main(void)
{
  printf("%p\n", "");
  printf("%p\n", NULL);
  printf("%p\n", "");
  setlocale(LC_NUMERIC, "");
  printf("%'.2ld\n", 1234567);
  printf("%p\n", "");
}

要不要 try try 看上面的結果如何呢?
要判斷空字串,我到認為字串與 "" 比較似乎是多呼叫了 strcmp 。其實只要簡單的判斷字串開頭的內容是否為 0 就可以了呢!


沒錯, 直接比較第一個字元會是比較快的作法 ?

try 上面是要說明不同的 "" 出現同樣的 address 嗎 ?
這個與 compiler 有關, 對於同樣的常數, 有的 compiler 會只存放一個來節省使用的記憶體空間.