嘿所有,快速问题:.NET decimal类型如何在内存中以二进制形式表示?
我们都知道浮点数是如何存储的,因此存在不准确的原因,但decimal除了以下内容之外我找不到任何有关的信息:
有什么方法可以解决这个问题吗?我的计算机科学家要求答案,经过一个小时的尝试研究,我找不到它.似乎有很多浪费的东西,或者我只是在脑海中想象这个错误.有人可以对此有所了解吗?谢谢.
我继续看到64位IEEE浮点表示中有关53位精度的无意义.有人请向我解释一下,如果世界上有一点卡在其中,那么它对数字精度的贡献是什么?如果你有一个浮点单元,其中bit0被固定为1,你当然会知道它比正常情况下产生的精度要低1位.这些敏感性在哪里?
此外,只有指数,没有尾数的比例因子,完全指定数字的前导位的确切位置,因此不使用前导位.第53位和第19洞一样真实.它只是一个(有用的)拐杖来帮助人类思维和以二进制方式访问这些值的逻辑.否则要求重复计算.
声称这第53位废话的所有书籍和文章都是错的,或者我是个白痴.但是卡住的是一个卡住的位.让我们听听相反的论点.
我无法理解什么是错的?我有一点变数.
decimal Price = 22348 / 100;
我得到的答案是:223,但我应该得到223.48.问题是什么?
我真的很抱歉问这么简单的问题,但我真的无法弄清楚是什么问题.我想将任何商标转换为12年级.我试着这样做如下:
double coef=(4/20)*12;
int mark=(int)coef;
Run Code Online (Sandbox Code Playgroud)
但是当我通过调试器执行此代码时,我发现它coef等于零.为什么这是双变量?
我有一个问题.我正在尝试将Farenheit设为Celcius计算器,当我做数学的一小部分时,它有点不起作用.它是0或1.
private void toCelcius_Click(object sender, EventArgs e)
{
double F = double.Parse(temperatureBox.Text);
double fm32 = F - 32;
double fraction = (9 / 5);
double newTemp = fraction*fm32;
temperatureLabel.Text = newTemp.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我一直使用100作为我的测试号,每次我向文本框发送100,它返回68.它应该在30左右.
目前程序只将分数检测为1.我尝试使用十进制而不是使用double,但这会破坏newTemp问题.我尝试使用float,但得到的结果与double相同.我没有什么特别的想法,但是非常令人沮丧.
如果有人知道如何解决这个问题,我会非常感激.
编辑:Facepalm自从我使用双打以来已经很久了,忘了我需要在每个数字之后都有.0.
我在这里想要完成的是计算迭代链表的算法进度,但是当我尝试将迭代次数除以链表中的元素总数时,我总是得到0,代码是这个:
double progress = iteratorCount/crawlerTechnologiesLinkedList.Count;
Console.WriteLine("Progress:" + progress * 100);
Run Code Online (Sandbox Code Playgroud)
并且调试会话显示这些值

我一直试图弄清楚为什么进步等于0.0但无济于事.任何帮助将不胜感激.
我感觉这是一个错误,是吗?
decimal s = 30 / 9;
double w = 20 / 9;
Console.WriteLine(s);
Console.WriteLine(w);
Run Code Online (Sandbox Code Playgroud)
结果是