0

我对 C 语言完全陌生。试图在这里接机。希望你们能帮助我一点,如果我问了一些愚蠢的问题,请提前道歉,但我真的找不到这个具体问题的任何答案。也对不起我的英语。

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

#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

为什么尾数没有按照我的输入出现?我如何解决它?

4

1 回答 1

0

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

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

printf("Critical Damage = %.2f.\n", Crit_Dmg);
于 2014-03-23T11:47:02.590 回答