JBTALKS.CC

标题: c programming problem [打印本页]

作者: bmw    时间: 2009-8-18 06:38 PM
标题: c programming problem
example
如果我要把 45.66 变成 45.65
或者是我要把 45.12 变成 45.10 然后我应该怎样做
它有点像rounding mechanism

问题是我应该使用什么东西来让它进位或退位(只要decimal进位或退位,integer没有变)?
应该不能使用ceil or floor 吧???
作者: Super-Tomato    时间: 2009-8-18 06:43 PM
原帖由 bmw 于 2009-8-18 06:38 PM 发表
example
如果我要把 45.66 变成 45.65
或者是我要把 45.12 变成 45.10 然后我应该怎样做
它有点像rounding mechanism

问题是我应该使用什么东西来让它进位或退位(只要decimal进位或退位,integer没有变)? ...



你是指馬來西亞的小數點計算還是正常的進位運算??
作者: goodday    时间: 2009-8-18 06:45 PM

你问的很模糊
小数点的 因该只有 decimal double 来处理吧?

45.66 - 0.01 = 45.65
ceil or floor 是 round up 吧??
4舍5入
作者: bmw    时间: 2009-8-18 07:05 PM
标题: 回复 #2 Super-Tomato 的帖子
馬來西亞的小數點計算
作者: bmw    时间: 2009-8-18 07:08 PM
decimal double 是什么??
作者: Super-Tomato    时间: 2009-8-18 07:53 PM
原帖由 bmw 于 2009-8-18 07:05 PM 发表
馬來西亞的小數點計算



如果是馬來西亞的計算方式, 你就要自己寫個 function, 判斷小數點之後的小數是否達到要求而進位, 至於 function 內容怎麼寫就要靠你自己寫了
有甚麼問題的時候才把你的 coding 貼出來, 到時自然會有人指導你錯誤的地方
作者: bmw    时间: 2009-8-19 08:45 PM
#include <stdio.h>
#include <math.h>
void input(double[]);
double calculate(double[]);
double roundingTotalPrice(double);
double productPrice[10],totalPrice,totalRoundedPrice;


void main () {


  input(productPrice);
  totalPrice=calculate(productPrice);
  printf("Total Price is %.2f",totalPrice);
  totalRoundedPrice=roundingTotalPrice(totalPrice);
  printf("\nTotal Rounded Price is %.2f",totalRoundedPrice);
}


void input(double productPrice[]){
      int i;

      for(i=0;i<10;i++){
      scanf("%lf",&productPrice);
   }
}

double calculate(double productPrice[]){
      int i;

      for(i=0;i<10;i++){
      totalPrice =totalPrice + productPrice;
    }
    return totalPrice;
}

double roundingTotalPrice(double totalPrice){
     double price;
     int number;

     price =(totalPrice*10)-(int)(totalPrice*10);
     number = price *10;
     if(number==0){
       totalRoundedPrice=totalPrice;
       return totalRoundedPrice;
      }
     else if(number==1){
       totalRoundedPrice = totalPrice - 0.01;
       return totalRoundedPrice;
     }
     else if(number == 2){
       totalRoundedPrice = totalPrice - 0.02;
       return totalRoundedPrice;
     }
     else if(number==3){
       totalRoundedPrice = totalPrice + 0.02;
       return totalRoundedPrice;
     }
     else if(number==4){
       totalRoundedPrice = totalPrice + 0.01;
       return totalRoundedPrice;
     }
     else if(number==5){
       totalRoundedPrice = totalPrice;
       return totalRoundedPrice;
     }
     else if(number==6){
       totalRoundedPrice = totalPrice - 0.01;
       return totalRoundedPrice;
     }
     else if(number==7){
       totalRoundedPrice = totalPrice - 0.02;
       return totalRoundedPrice;
     }
     else if(number==8){
       totalRoundedPrice = totalPrice + 0.02;
       return totalRoundedPrice;
     }
     else{
       totalRoundedPrice = totalPrice + 0.01;
       return totalRoundedPrice;
     }
}



有点问题
example:we enter
1.22
1
1
1
1
1
1
1
1
1
total price= 1.22
total rounded price=1.21

another example
1.32
1
1
1
1
1
1
1
1
1
total price 10.32
total rounded price 10.30
为甚么这个可以而上面那个却不可以??
是不是我做错什么了??
作者: goodhermit95    时间: 2009-8-19 10:15 PM
标题: 回复 #7 bmw 的帖子
你你你你你
那么多个 if elseif elseif
用switch case

switch(number)
{
case(0) //也就是 number = 0,要做什么东西
{
//写在这里
}
case(1)
{
}
}
returntotalroundedprice; /这个写在外面啊,为什么写那么多个在里面?
作者: Super-Tomato    时间: 2009-8-19 10:58 PM
原帖由 bmw 于 2009-8-19 08:45 PM 发表
#include
#include
void input(double[]);
double calculate(double[]);
double roundingTotalPrice(double);
double productPrice[10],totalPrice,totalRoundedPrice;


...



example:we enter
1.22
1
1
1
1
1
1
1
1
1
total price= 1.22
total rounded price=1.21


another example
1.32
1
1
1
1
1
1
1
1
1
total price 10.32
total rounded price 10.30
为甚么这个可以而上面那个却不可以??
是不是我做错什么了??


你的 coding 大致上看是沒錯, 但紅色的部分怎麼只是 1.22??? 我想應該是 10.22 吧
而你的進位只有 10.21 大概是編譯器的小數點計算問題, 有些編譯器會有這點不精準的問題
作者: Super-Tomato    时间: 2009-8-19 11:05 PM
原帖由 bmw 于 2009-8-19 08:45 PM 发表
#include
#include
void input(double[]);
double calculate(double[]);
double roundingTotalPrice(double);
double productPrice[10],totalPrice,totalRoundedPrice;


void main () {


  inpu ...



剛用 GCC 編譯器和 VC++ .NET 測試過了, 後者有你這樣的問題, 而前者則沒問題
GCC 所編譯出來的執行檔
作者: bmw    时间: 2009-8-20 06:41 AM
标题: 回复 #8 goodhermit95 的帖子
好的`谢谢你的意见...
作者: bmw    时间: 2009-8-20 06:44 AM
标题: 回复 #10 Super-Tomato 的帖子
我用的是 borland c++...我试过你的了,果然没问题..
那我是要重新 code the program 还是什么??
作者: Super-Tomato    时间: 2009-8-20 07:47 AM
原帖由 bmw 于 2009-8-20 06:44 AM 发表
我用的是 borland c++...我试过你的了,果然没问题..
那我是要重新 code the program 还是什么??


如果你是用 BCB 的話, 建議你可以換另一個編譯器(Compiler), Coding 方面不用更改
不想換 Compiler 的話那麼你的 coding 方面可以改為用文字判斷
作者: bmw    时间: 2009-8-22 10:03 AM
请问 ANSI C OR Turbo C++可以用吗??
因为我的 SOFTWARE REQUIREMENT 是鼓励我们用 ANSI C OR Turbo C++ OR Borland C++...
作者: Super-Tomato    时间: 2009-8-22 10:54 AM
原帖由 bmw 于 2009-8-22 10:03 AM 发表
请问 ANSI C OR Turbo C++可以用吗??
因为我的 SOFTWARE REQUIREMENT 是鼓励我们用 ANSI C OR Turbo C++ OR Borland C++...


C, Turbo C++, BCC 都只是 Compiler 而已, 這和你的 C++ coding 沒關係, 這幾款編譯器也是根據 C 標準, 不會因為不同而有特別的差距
這是個例子讓你了解編譯器和 coding 的差異

例子
作者: bmw    时间: 2009-8-22 02:13 PM
想请问你用什么 software(为甚么在你例子里面的 project build option 那里有那么多的 compiler)
作者: Super-Tomato    时间: 2009-8-22 05:31 PM
原帖由 bmw 于 2009-8-22 02:13 PM 发表
想请问你用什么 software(为甚么在你例子里面的 project build option 那里有那么多的 compiler)



我是使用免費軟體 Code::Blocks, 這個軟體並在安裝的時候是只有 GCC 的 compiler, 其他的是自己安裝了, 然後通過裡面的設定指向其他 compiler
作者: duo8668    时间: 2009-8-24 01:02 AM
如果是 currency 的话,那么后面就只有 两个尾数,也就是说 乘于 100 会拿到 整数。
然后1个号码拿去 modulus 10 的话,应该可以得到 最后的尾数/remainder。

13.56 * 100 = 1356 ,  1356%10 = 6

force cast 会让特定的数值计算在转换中流失。。。计算机的问题。

或许你的老师或朋友或你已经试过以上的方法但是行不通,别见怪 =)




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5