【问题标题】:Combine two integers (one containing the integer part, the other the decimal part) into a floating point number将两个整数(一个包含整数部分,另一个包含小数部分)组合成一个浮点数
【发布时间】:2013-08-25 19:10:40
【问题描述】:

如何通过组合两个整数来生成double 值?我已经尝试过搜索,但找不到我正在寻找的答案。

是这样的:

int wholeNumber = 2;
int decimal = 25;

我想创建一个double,结果为2.25

【问题讨论】:

  • 如果十进制是 5 怎么办?那是 2.5 还是 2.05?
  • 如果你想要 2.025 它将不起作用,因为 int 不存储前导零。
  • 十进制是C#的关键字。
  • 您可以尝试连接两个字符串(“2”和“25”)并使用 Parse 函数将其转换为双精度。我同意上面的 cmets,缺少前导零会让你头疼。
  • 我还想指出,如果值不能正确表示,使用 double 或 float 可能会引入舍入错误。

标签: c# floating-point


【解决方案1】:

作弊解决方案如下:

string number = wholeNumber + "." + decimal
double doubleNumber = Double.Parse(number);

干净的解决方案包括检查“十进制”中有多少个值,除以 10^amount 并将它们相加

正如所指出的 - 十进制分隔符是特定于文化的 - 所以完全正确的版本是

string number = wholeNumber + System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSepar‌​ator + decimal
double doubleNumber = Double.Parse(number);

(我保留最上面的,因为它更容易理解)

【讨论】:

  • 不知道我会如何处理。 Math.Abs​​,或否定一切。我想 OP 知道这应该如何为他自己的实现工作。
  • 不要忘记小数点分隔符是特定于文化的。
  • 您可能希望将其替换为“System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator”,而不是使用“.”
  • 相应编辑。我保留了这两个,因为上面的一个更容易理解,即使它不完全正确。
  • 实际上我们只是想将 Time 转换为 double。有一个负值是不可能的,所以我们猜想这可以解决它。非常感谢!
【解决方案2】:

或者...只使用数学:

double d = wholeNumber + (double)decimal / 100;

说真的……

【讨论】:

  • 这完全取决于OP的问题是如何定义的吗?你会期待什么?你真的认为将整数部分和小数部分组装成浮点数需要字符串连接+解析吗?
  • 我们只是试图将时间转换为双精度,所以我们猜测第一个答案已经足够好了。非常感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2013-05-06
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多