發問時間: 電腦與網際網路程式設計 · 9 年前

請問怎麼讓程式計到小數位

/*computes the dimensional weight of a box from input providedthe users*/

#include

#include

int main(void)

{

int height,width,length,volume;

float weight;

printf("enter height of box: ");

scanf("%d",&height);

printf("enter width of box: ");

scanf("%d",&width);

printf("enter length of box: ");

scanf("%d",&length);

volume=height*length*width;

weight=(volume+165)/166;

printf("volume=%d\n",volume);

printf("weight=%f\n",weight);

system("pause");

return 0;

}

以上是我打的一個簡單計算的程式

我明明有把weight改成float啊 但是當他計算出來時 會出現 .000的情況

也就是他沒有計算到小數點後 還是整數 只是後面多個 .000而已

所以要怎麼改她才會計算到小數點以後啊????

已更新項目:

對不起喔 再問一下

單精度和雙精度還是看不太懂差別在哪裡哀

就是他們各自會產生什麼效果阿??

還有 j 的回答中 這個部分static_cast 可以在說明一下嗎 謝謝

3 個解答

評分
  • j
    Lv 4
    9 年前
    最佳解答

    #include <stdio.h>

    #include <stdlib.h>

    int main(void)

    {

    int height,width,length,volume;

    double weight;

    printf("enter height of box: ");

    scanf("%d",&height);

    printf("enter width of box: ");

    scanf("%d",&width);

    printf("enter length of box: ");

    scanf("%d",&length);

    volume=height*length*width;

    weight=static_cast<double>( volume+165)/166;printf("volume=%d\n",volume);

    printf("weight=%.10f \n",weight);

    system("pause");

    return 0;}

    2011-09-24 22:07:54 補充:

    要作 形態轉換,否則它會被當整數計算,即沒有小數部份!

    2011-09-26 17:20:53 補充:

    c++ 有 四種轉換 const_cast , dynamic_cast , reinterpret_cast , static_cast

    const_cast (加入或移除 const) ...

    static_cast (靜態強制轉型.ps 大轉小之一類)...

    reinterpret_cast(重解強制轉型)...

    dynamic_cast (有些複雜)...

    解釋有些複雜

    2011-09-26 17:22:50 補充:

    找本C++看看吧!

    C是用 (欲轉型別)原本型別 如 int i=10; (char)i; 把i 從 int 轉成 char

  • 其威
    Lv 7
    9 年前

    static_cast< >、dynamic_cast< >、const_cast< >、reinterpret_cast< > 是 C++ 才有的轉型運算子,C 看不懂這些東西。

    C 裡面,轉型一般寫成這樣:

    int a;

    float b;

    b = (int)a;

    但是這樣比較難看出哪裡有用到轉型(例如要使用工具來 search 的時候比較困擾,或是判斷是哪種轉型方式),所以 C++ 提供以上四個轉型運算子來分辨不同的轉型方式。

  • 9 年前

    int = (具符號整數)

    範圍 = -2,147,483,648 到2,147,483,647

    unsigned int = (無符號整數)

    範圍 = 0 到4,294,967,295

    float = (單精度)有效為7位數字

    範圍

    負數:-3.402 × 10 38 到-1.401 × 10 -45

    正數:1.401 × 10 -45 到3.402 × 1038

    double = (雙精度)有效為15位數字

    範圍

    負數:-1.798 × 10 308 到-4.94 × 10 -325

    正數:4.94 × 10 -324 到3.402 × 10308

    * 只要把float (單精度)換成 double(雙精度) 就可以了!

    2011-09-27 23:12:52 補充:

    float weight,volume;

    printf("enter height of box: ");

    scanf("%d",&height);

    printf("enter width of box: ");

    scanf("%d",&width);

    printf("enter length of box: ");

    scanf("%d",&length);

    volume=height*length*width;

    weight=(volume+165)/166;

    printf("volume=%f\n",volume);

    printf("weight=%f\n",weight);

    2011-09-27 23:13:09 補充:

    %i => 有號(signed)整數

    %d = > 有號(signed)十進位整數

    %u => 無號(unsigned)十進位整數

    %f => 浮點數

    %c => 單字元

    %s => 字串(需有'\0'作為字串結尾)

    2011-09-27 23:57:17 補充:

    printf 對 %f 小數定為六位。

    所以看到.000000 (六個零) 而不是.0000000(七個零)

    %.0f 或 %g 去關掉那些 0

    如果是小數要多於六位%10f

    參考資料: , 自己, 自己, 自己
還有問題?馬上發問,尋求解答。