decimal转化为single(float)

hyh2005888123 2009-04-13 11:12:35
在把decimal转化为single时,用Decimal.ToSingle(),数值结果完全变了,哪位大哥知道更好的方法,可以让数值大小相符!!
问题2:在Matlab里,如何把一个single类型的矩阵保存为2进制格式,Matlab的single与.net里的single相同吗??
...全文
564 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
junyi2003 2009-04-13
  • 打赏
  • 举报
回复
从普通程序员的角度来说, 这类转换肯定是先保证整数位的。然后才考虑小数点后的精度。

写C#之类的系统函数大多都是普通程序员出身,有时候写得挺出色,有时候写得不如人意。不如人意的时候,你就自己写一个符合自己要求的咯。 -.-
gqs2105 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 junyi2003 的回复:]
一个128位的,一个才32位。精度和数据表达范围,差远了。 你先转成double看看.......实在不行就迂回曲折一下。
[/Quote]

请看5楼我的回复,
存储在decimal中的数值精度越高在转化成float或double时,产生的误差就越大
gqs2105 2009-04-13
  • 打赏
  • 举报
回复
精度指的是整数位+小数位的个数,

当整数位不为0时
例如 5.666666666666666666666666666666 精度是31

保存到double中时由于超出了double本身的精度范围所以会舍位,
得到5.66666666666667 精度15 有效数字14(最后的7是4四舍五入的)

保存到float中
得到5.666667 精度7 有效数字6 (最后的7是4四舍五入的)

保存到decimal中
得到5.666666666666666666666666667 精度 28 有效数字27 (最后的7是4四舍五入的)

当整数位为0时
例如 0.5666666666666666666666666666666 精度是32

保存到double中时由于超出了double本身的精度范围所以会舍位,
得到0.566666666666667 精度16 有效数字15(最后的7是4四舍五入的)

保存到float中
得到0.5666667 精度7 有效数字6 (最后的7是4四舍五入的)

保存到decimal中
得到0.5666666666666666666666666667 精度 29有效数字28(最后的7是4四舍五入的)





junyi2003 2009-04-13
  • 打赏
  • 举报
回复
一个128位的,一个才32位。精度和数据表达范围,差远了。 你先转成double看看.......实在不行就迂回曲折一下。
gqs2105 2009-04-13
  • 打赏
  • 举报
回复
类型 大致范围 精度 .NET Framework 类型
double ±5.0×10−324到±1.7×10308 15到16 位 System.Double

类型 大致范围 精度 .NET Framework 类型
float ±1.5×10-45to±3.4×1038 7 位 System.Single

类型 大致范围 精度 .NET Framework 类型
decimal ±1.0×10e−28至±7.9× 10e28 28到29 System.Decimal


hyh2005888123 2009-04-13
  • 打赏
  • 举报
回复
这个我懂,但误差不可能差几个数量级啊!!
gqs2105 2009-04-13
  • 打赏
  • 举报
回复
A1: decimal转成float或double数值会产生误差
float或double装成decimal时数值不会产生误差

原因:decimal与另外两种类型的存储方法不同

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧