稍微关闭printf中的Mantissa值

时间:2014-03-23 11:29:00

标签: c printf mantissa

我是C langauge的新手。试着在这里接受。希望你们能帮助我一点,如果我问了一些愚蠢的话,请提前对不起,但我真的找不到这个具体问题的答案。也很抱歉我的英语。

无论如何,下面是我的代码,对我来说没问题。

#include <stdio.h>

int main(int argc, const char * argv[])
{


// float variable named "Crit_Dmg"
float Crit_Dmg;

// give "Crit_Dmg" a value
Crit_Dmg = 11.34;


// Log it to the user
printf("Critical Damage = %f.\n", Crit_Dmg);

// Declare Float variable named "Magic_Dmg"
float Magic_Dmg;

// Give Magic_Dmg a value
Magic_Dmg = 5.48;


// Show user
printf("Magical Damage = %f.\n", Magic_Dmg);

// Declare Double variable named "T_Dmg" (Total Dmg)
double T_Dmg;

// calculation of total damage (T_Dmg)
T_Dmg = Crit_Dmg + Magic_Dmg;

// show user Totas Dmg value
printf("Total Damage = %f.\n", T_Dmg);

// end
return 0;

}

printf结果显示

Critical Damage = 11.340000.
Magical Damage = 5.480000.
Total Damage = 16.820000.
Program ended with exit code: 0

但是当我将Crit_Dmg和Magic_Dmg值提高时,根据我的输入,尾数只是不准确...

例如我改为

Crit_Dmg = 115.34;

Magic_Dmg = 515.48;

printf似乎如下所示

Critical Damage = 115.339996.
Magical Damage = 515.479980.
Total Damage = 630.819946.
Program ended with exit code: 0

为什么尾数不会按照我的输入显示? 我该如何解决?

1 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,浮点数存储在基数2中以最大化为给定数量的内存存储的数字的精度,但并非所有基数10小数都在基数2中具有精确表示,因此有时会出现舍入错误在基数2中你不会在基数10中看到,即使任意数的总体准确性优于使用基数10。

最简单的解决方法是更明确地格式化输出:

printf("Critical Damage = %.2f.\n", Crit_Dmg);