C#如何精确地将双精度转换为十进制?

兹沃尔科夫

以下C#代码显示0.1-为什么?

var s = "0.1";
var dbl = Double.Parse(s);
var dcml = Convert.ToDecimal(dbl);
Console.WriteLine(dcml.ToString());

0.01不是不能用二进制表示的,因此应该打印0.100000001490116吗?

乔恩·斯基特

的值dbl正好是0.1000000000000000055511151231257827021181583404541015625。

那是0.1到17个有效数字。

对文档Convert.ToDecimal(Double)状态:

此方法返回的Decimal值最多包含15个有效数字。如果value参数包含15个以上的有效数字,则使用舍入到最接近的值将其舍入。

Single(aka float)进行转换已记录在案,以便更早地截断:

此方法返回的Decimal值最多包含七个有效数字。如果value参数包含七个以上的有效数字,则使用四舍五入到最接近的数字进行四舍五入。

如果Convert.ToDecimal(Double)使用初始转换为0.1f的值进行调用,它将显示0.100000001490116:

double dbl = 0.1f;        
decimal dcml = (decimal) dbl;
Console.WriteLine(dcml);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将类型十进制转换为双精度

隐式将十进制转换为双精度或将双精度转换为十进制

将IEEE-754双精度和单精度转换为十进制Java错误

无法从双精度转换为十进制错误

C#将字符串转换为双精度/十进制并返回字符串,保持尾随零,为数千添加逗号

如何将 Scala 数据框中的所有十进制列转换为双精度类型?

将大十进制转换为不带指数格式的双精度

将字符串转换为双精度(非十进制)

Spark for Python-无法将字符串列转换为十进制/双精度

将十进制数字从字符串转换为双精度

为什么 C# 会错误地计算双精度数和十进制数?

如何精确地将毫秒转换为秒

如何将IEEE 754双精度(64位)格式的十六进制数字转换为十进制数字?

将十进制转换为单精度IEEE 754

如何使用C#将十进制转换为字符串

如何在Matlab中将十进制转换为IEEE双精度浮点二进制?

如何在双精度双精度和十进制字符串之间转换?

将十六进制十进制IP地址转换为c#中的点表示法十进制

在没有内存分配的情况下,在 C# 中将浮点数/双精度数/十进制数转换为 (u)int、(u)long

将具有时间值“ 0:00”的字符串转换为十进制/双精度值?

将float转换为str时如何检查默认的十进制精度?

C#:如何将十进制转换为字符串而不转换为指数表示

在C ++中使用atof将带有十进制的字符串转换为双精度

C ++将字符串精确转换为双精度

测试十进制值是否可以转换为双精度

如何使用C语言将十六进制数组转换为十进制

如何将 2 个数字转换为十进制数的 2 个部分 [C#]

如何将numpy.int32转换为十进制。十进制

如何将十进制度分转换为十进制度