【问题标题】:How do I shift the decimal point in C# [closed]如何在 C# 中移动小数点 [关闭]
【发布时间】:2021-07-19 14:29:39
【问题描述】:

如果我有一个等于 8675309 的 int,将其转换为等于 0.8675309f 的浮点数的最佳/最快方法是什么?

示例:


输入为 int:8675309

输出为浮点数:0.8675309


输入为 int:4234512

输出为浮点数:0.4234512


输入为 int:56

输出为浮点数:0.56


输入为 int:123456

输出为浮点数:0.123456


输入为 int:654321

输出为浮点数:0.654321


我尝试将输出映射到 0 到 1 之间的值,但对于 RNG 设置,它的平均值往往为 0.64,这并不理想。

我已经使用 Tanh、Cos、Sin 和其他函数对其进行映射,但似乎我真的只想得到以小数开头的确切数字,因此精度保持在一样。

我想我可以除以一个很大的数字,但它不会是一致的,因为数字的大小必须随着 RNG 输出大小的变化而变化。

我真的不知道为什么这里没有足够的信息。在第一行很清楚我到底想要做什么。谁能比这更具体?

【问题讨论】:

  • 这能回答你的问题吗? How do I convert Int/Decimal to float in C#?
  • @gunr2171 没有,请阅读问题
  • 那么还要做乘法吗?
  • 欢迎使用 stackoverflow。到目前为止,您自己尝试过什么?你遇到了什么问题?你研究了什么?请编辑您的问题以包含更多信息。另请阅读what's on topichow to ask a good question 我推荐taking the tour,以及阅读how to ask a good questionwhat's on topic
  • 我认为@LasseV.Karlsen 指出的问题是,通过这种投影,您的分布位于 0.1 和 1 之间,而不是介于 0 和 1 之间! (理论上它可以精确地绘制 0,但您可以理解我的意思),任何映射在 0 和 0.1 之间的值,您会映射到更高的值,从而导致分布不均匀。这也是为什么人们在谈论 X-Y 问题而您没有提供足够信息的原因。你对你真正想要达到的目标只字未提。

标签: c# data-conversion


【解决方案1】:

你在纸上的做法是:

  1. 求8675309的位数
  2. 除以10^(number of digits)

您可以通过将其格式化为字符串并计算字符数(不好),或者将日志以 10 为底并四舍五入(好),以找到以 10 为底的位数:

int input = 8675309;
int numDigits = (int)Math.Ceiling(Math.Log10(input));

然后除以10^numDigits:

float result = input / MathF.Pow(10, numDigits);

【讨论】:

  • 这正是我想要的,谢谢!
  • OP 谈到想要介于 0 和 1 之间的分布(隐含平均值为 0.5?),但我认为这将跳过区间 (0, 0.1) 中的任何值。即使 OP 要求这样做(我唯一的结论是 OP 的要求存在矛盾,我认为这就是人们要求澄清的原因)。因此,即使我通常是您的答案和 cmets 的忠实粉丝,但在这种情况下,我觉得您可能没有向 OP 提供他真正需要的东西。
  • @Knoop 公平地说,我在他们添加额外信息转储的编辑之前回答了。人们尝试在 OP 的 cmets 中取得进展但未能取得进展,所以我不看好我的机会!这回答了问题前半部分中规定的规范,所以我将保留它(也许其他人实际上可能会遇到指定的这个问题),但是如果其他人设法弄清楚 OP 需要什么 i>,请随时回答,欢迎他们打绿勾
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多