保存带小数位的数字的类型——浮点数、双精度数
这些数据类型通常称为浮点数据类型。 这些数字被称为 浮点 数字。
浮动 fvar = 50.15; double dvar = 50.0;
比较浮点数据类型——float 和 double
float 和 double 数据类型之间的区别在于小数位数 # 的精度。
基于 VexOS – ARM 7 规范,float 可以处理 6 或 7 个位置,double 可以处理 15 或 16 .
float:在当前的 V5os 中,控制器似乎允许最多 8 位小数精度。
例如
浮动 fvar1 = 1.12345670; float fvar2 = 1.12345678;
fval1 与 fvar2 不同,
诉
浮动 fvar1 = 1.123456780; float fvar2 = 1.123456781;
fval1 的计算方式与 fvar2 相同。
double:允许最多 17 个小数位的精度。
例如
双 dvar1 = 1.12345678912345678; 双 dvar2 = 1.12345678912345670;
dval1 与 dvar2 不同,
诉
双 dvar1 = 1.123456789123456789; 双 dvar2 = 1.123456789123456780;
dval1 的评估方式与 dvar2 相同。
除非您需要高精度,否则不要使用“double”
除非需要高精度,否则不应该使用“double”有两个原因:
- 它占用 2X 浮点型。
- 它占用更高的处理能力。
基于 VexOS – ARM 7 规范,一个 float 可以做 6 到 7 个位置,一个 double 可以处理 15或 16。 无论哪种情况,您都不应该依赖双精度或浮点数中最后一位数字的准确性。 由于所谓的“浮点计算”(这超出了本文的范围),它的存储方式与“int”的存储方式非常不同。
因此,您可能会失去最后几个小数位的准确性。
与 float 相比,double 的运算成本相当高,并且由于称为浮点计算的东西而比“integer”高得多。
根据 IEEE 标准,以下在更可靠的范围内。
类型 | 最小正值 | 最大正值 | # 精度 |
漂浮 | 10 -38 x 1.17549 | 10 38 x 3.40282 | 6位 |
双倍的 | 10 -308 或 2.22507 | 10 308 x 1.79769 | 15位 |
你能交换原始数据类型吗? - 铸造
可以交换数据类型。 这种技术称为“铸造”。 虽然强制转换是一种相当普遍的做法,但只有在必要时才这样做。
最常见的做法之一是交换 char 和 int。
这是因为它们都表示整数值,但有一个例外:
- “int”包含 4 个字节(或在某些编译器中为 8 个字节)
- “char”仅包含 1 个字节。
所以,例如
字符 aVal = 100; int iVal = aVal; // 隐式转换
或者
int iVal = (char) aVal; // 显式转换。
隐式截断的注意事项:
例如
另一种常见的做法是交换 int 和 float
浮动 fVal = 5.486; 浮点分数 = fVal - (int)fVal; //它确实:5.486 - 5
隐式截断的注意事项:
例如
内部 iVal = 50; float fVal = iVal / 100;
现在 fVal = 0.0,而不是 0.5。
利用隐式截断绝对没问题,这在某些情况下通常是操作的重要部分。 但是,您需要确保按照设计使用此技术。
如果您不希望发生隐式截断,则需要进行显式转换:
- 隐式转换:
float fVal = iVal / 100.0;
- 显式转换:
float fVal = (float) iVal / 100