【问题标题】:How to get value after decimal point from a double value in C#?如何从 C# 中的双精度值获取小数点后的值?
【发布时间】:2017-01-12 05:19:48
【问题描述】:

我想从一个双精度值中获取十进制值。

例如:

23.456 ->  0.456
11.23  ->  0.23

谁能告诉我如何在 C# 中做到这一点?

谢谢, 马赫什

【问题讨论】:

  • 对于-5.4,您期望0.4 还是0.6
  • 我知道这是一篇旧帖子,但您可能需要重新考虑您接受的答案。

标签: .net double


【解决方案1】:

System.Math 中没有专门执行此操作的方法,但有两个方法提供了获取小数的整数部分的方法,具体取决于您希望如何表示负十进制数。

Math.Truncate(n) 将返回小数点前的数字。因此,12.3 将返回 12,-12.3 将返回 -12。然后你会从你的原始数字中减去这个。

n - Math.Truncate(n) 对于 12.3 和 -12.3 都会给出 0.3。

使用类似的逻辑,Math.Floor(n) 返回小于小数点的整数,Math.Ceiling(n) 返回大于小数点的整数。如果您希望对正数和负数使用不同的逻辑,可以使用这些。

【讨论】:

  • Math.Floor(n) 为我工作:小数 = 数字 - Math.Floor(number)
  • @CoachRoebuck 是的,如果您只使用正数,Math.Floor 的工作方式与 Math.Truncate 相同。但是,Math.Truncate 将适用于所有数字。
  • 就我而言是正数。
  • 这对于 n = 1234567.098 也是不精确的。
【解决方案2】:

x - Math.Floor(x);

文本最多可包含 30 个字符

【讨论】:

  • 这只会给出正数的准确答案。 Math.Truncate 将是正确使用的方法。
【解决方案3】:

这就是取模运算符 (%) 的用途。将第一个操作数除以第二个操作数时,它会为您提供余数。只需将您想要的小数除以 1。

例如:

decimal d = new Decimal(23.456);
d = d % 1;

// d = 0.456

[编辑]

在阅读了 Nellius 对我的帖子的评论后,我对其进行了测试。当使用双精度模运算符时,实际上返回 0.45599999999999952。我的回答其实是错误的。

[/编辑]

参考:http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

【讨论】:

  • 对双精度数使用模运算符是不精确的,因为双精度数不存储为精确值。您在答案中引用了小数类型,这将给出准确的答案,但 OP 询问了双精度数。
【解决方案4】:

我在计算偏移量时使用这种方法。

double numberToSplit = 4.012308d;
double decimalresult = numberToSplit - (int)numberToSplit; //4.012308 - 4 = 0.012308

【讨论】:

    【解决方案5】:

    试试这个。

        Dim numberToSplit As Double = 4.52121
        Dim decimalresult As Double = numberToSplit - Convert.ToInt64(numberToSplit)
        MsgBox(decimalresult)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-26
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      相关资源
      最近更新 更多