【发布时间】:2021-01-31 14:59:28
【问题描述】:
现在,我遇到了很多与 C# 浮点类型 decimal 相关的问题,并且我看到了它与 float 和 double 的区别,这让我开始思考是否有与这种类型等效的类型在 C 中。
在指定的问题中,我得到了一个我想转换为 C 的答案:
double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
当然,唯一的变化是第二行不见了,但是关于 decimal 类型的东西,我想知道它是 C 等价的。
问题:什么是 C# 的 decimal 的 C 等价物?
【问题讨论】:
-
C 中没有“十进制”等价物。通常使用纯整数scaled
100(or more for error/rounding management) times。 -
一些 C 实现有十进制浮点。虽然 C 标准允许
float和double类型使用它,但更常见的是实现对这些类型使用二进制并提供十进制作为扩展。例如,GCC has_Decimal32,_Decimal64, and_Decimal128types。与二进制浮点相比,您可能会发现性能较低。 -
你可以自己做这样的。
-
目前对十进制浮点的硬件支持极为罕见,因此性能不会很好。您应该使用 fixed-point arithmetic 代替,即按 10 的幂缩放值并以整数执行所有操作
标签: c floating-point decimal