我试图添加两个双号,1234567890123456.00和1.00,总和将存储到字符串中。
结果如下:
1234567890123456.00 + 1.00 = 1234567890123457.00
很明显它将以双重形式打印为1.23456789012346E + 15。
但如果我试图通过使用方法ToString(" F")或ToString("#")将其转换为字符串,则结果为1234567890123460.00。我失去7(最后一位数)的地方?
static void Main(string[] args)
{
double d = 1234567890123456;
double d2 = 1;
double d3 = d + d2;
Console.WriteLine(d3);
Console.WriteLine(d3.ToString("F"));
}
请帮我纠正代码或找到替代方案。
答案 0 :(得分:1)
Double类型有15-16 decimal precision digits,你的d值有16位有效十进制数,所以你强调这个限制:
double d = 1234567890123456;
(有效数字的)限制来自mantissa IEEE 754标准中的binary64实际上是15.95个有效十进制数字。
Decimal可能是一个不错的选择。
答案 1 :(得分:0)
static void Main(string[] args)
{
double d = 1234567890123456;
double d2 = 1;
double d3 = d + d2;
Console.WriteLine(d3);
Console.WriteLine(d3.ToString("R"));
}
R - 往返解决了我的问题,我得到的预期结果为1234567890123457