【发布时间】:2021-04-19 07:14:17
【问题描述】:
我想计算小数点后的位数。我的程序可以运行,但是当我添加更多数字时它会返回错误的数字,例如,5.55266666666555555 小数点后有 17 位,但我的程序只返回 15。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Result is: {0}", howMuchDots(5.55266666666555555));
}
static double howMuchDots(double num)
{
/* Convert num to string, split it with dot into an array, and take the second cell. Then get the length of the string */
return num.ToString().Split(".")[1].Length;
}
}
我尝试改用float,但它也不起作用。
【问题讨论】:
-
Double 只有大约 15-17 位精度:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
-
@SomeBody 是的,我就是这么想的,那我为什么要这么做?
-
请注意,将 double 格式化为字符串通常会进行一些简化。使用“G17”格式查看所有血腥细节。但是,如果您要突破双精度的极限,那将无济于事
-
由于您正在处理精确到许多有效数字的数字,并且您需要准确地表示以 10 为基数的数字(没有转换为以 2 为基数的更改),使用它可能会更好
decimal而不是double: dotnetfiddle.net/GgMPe7 -
在这种情况下可能不相关,但还要考虑浮点数上的 ToString 插入当前区域性的小数分隔符,并且并非所有区域性都使用 .分隔小数部分。例如,在我的机器上,您的代码在拆分调用时失败。因为除了逗号之外别无意义
标签: c#