C# float 、double和decimal的解释
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# float 、double和decimal的解释相关的知识,希望对你有一定的参考价值。
他们的范围各自是多少?越详细越好!
float 单精度浮点 32bit,double 双精度浮点64bit,
decimal是高精度 128bit,浮点型。
float double 是 基本类型(primitive type),decimal不是。
float 有效数字7位,范围 ±1.5 × 10E−45 to ±3.4 × 10E38
double 有效数字15/16 位,范围 ±5.0 × 10 E−324 to ±1.7 × 10E308
decimal 有效数字 28/29 位,范围 ±1.0 × 10E−28 to ±7.9 × 10E28
( E -- 下接几次方)
decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。
使用的时候会对计算时的性能有影响。
常数写法:
float f = 12.3F; (带F)
double x=12.3; (不带就是double)
decimal d = 12.30M; (带M)
浮点数运算会有精度损失问题,有精度损失时程序不会报告,要程序员自己注意。 参考技术A float是单精度,double是双精度,decimal是数字型,它们所占的内存空间不一样,表示的位数也不一样。除了科学计算以外,一般不用double型的。对于数字(包括小数)一般用decimal型的。
这是基本上的拉。
decimal, double, float
refers :
http://blog.leanote.com/post/weibo-007/mysql_float_double_decimal
https://frontstuff.io/how-to-handle-monetary-values-in-javascript
https://www.html.cn/archives/7340
https://github.com/sarahdayan/dinero.js
https://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when
https://stackoverflow.com/questions/803225/when-should-i-use-double-instead-of-decimal
https://www.zhihu.com/question/65960911
https://exceptionnotfound.net/decimal-vs-double-and-other-tips-about-number-types-in-net/
https://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-currency-string-in-javascript
https://rockyee.iteye.com/blog/891538
人做计算的时候用的是 十进制, 电脑计算和存储的时候用的是二进制
十进制转换成二进制是 ok 的, 只要没有小数点.
有小数点的时候就麻烦了, 比如
javascript 0.1 + 0.2 === 0.3 // false 结果会是 0.3xxxxxxx 后面多了很多数字
其原因就是因为 0.1 的二进制是一个无限数字... double 用 64 位来记入数字, 肯定就丢失了后面的信息...转回十进制的时候就出现了偏差.
要解决这个问题,通常就是不要使用十进制小数点来运算,通过升级降级 ((0.1 x 10) + (0.2 x 10) ) / 10 就可以得到准确的数字了.
在真实的实现过程里,我们不能直接拿 0.1 x 10, 因为这个也是一个运算,依然会错。我们得用 string 然后自己把小数点移动去后面,然后再转换成数字
c# 的 decimal 就是替我们干了这些事儿. 而 js 目前没有 decimal,只能靠库帮忙了.
decimal 的特点是慢, 能处理的数字小.
double 就快, 但是不精准. (这个不精准是指,当用于十进制的运算时不精准)
那么什么时候用 decimal or double 呢?
如果你要计算东西,而这个东西的结果是可能被"人"拿来计算的, 那么我们就应该使用 decimal
比如:钱,积分 等等
那么 double 更多使用的场景是在游戏,图形,科学等地方。需要数字很大,运算快,但是有可以有偏差的地方。
js 库
https://github.com/MikeMcl/decimal.js
以上是关于C# float 、double和decimal的解释的主要内容,如果未能解决你的问题,请参考以下文章
MySQL类型float double decimal的区别