Lis*_*isa 5 c# numeric primitive-types
在C#中以下列方式从double转换为十进制是安全的:
int downtimeMinutes = 90;
TimeSpan duration = TimeSpan.FromHours(2d);
decimal calculatedDowntimePercent = duration.TotalMinutes > 0?
(downtimeMinutes / (decimal)duration.TotalMinutes) * 100.0m : 0.0m;
Run Code Online (Sandbox Code Playgroud)
如果答案是肯定的,那就不用大惊小怪,我只会标记为已接受.
是的,它是安全的,因为十进制具有更高的精度
http://msdn.microsoft.com/en-us/library/364x0z75(VS.80).aspx
编译器将在其他非十进制数字周围进行强制转换,但它们都适合十进制 * (请参阅警告)。
- 警告
Decimal 不是浮点类型。它的使命是始终保持精确性。而浮点数,例如 double (我主要使用它)则在精度上进行了权衡以适应非常大的数字)。非常大或非常小的数字不适合小数。所以Lisa需要问自己,运算的幅度是否有可能小于28位有效数字。28 位有效数字足以满足大多数情况。
浮点适用于天文数字大或无限小的数字......或产生足够精度的介于两者之间的运算。我应该查一下,但是 double 可以精确到小数点后几位(最多 7 或 8?),可以精确到正负几十亿。
在科学中,测量超出设备精度的测量是没有意义的。在金融领域,通常逻辑选择是 double,因为在大多数情况下 double 的计算效率更高(有时他们想要更高的准确性,但效率不值得为小数之类的东西而丢弃)。最后,我们都必须务实,将业务需求映射到数字领域。有些工具具有动态数字表示形式。.net 中可能有相同的库。然而,这值得吗?有时是这样。很多时候都是矫枉过正。
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |