【发布时间】:2017-01-12 05:19:48
【问题描述】:
我想从一个双精度值中获取十进制值。
例如:
23.456 -> 0.456
11.23 -> 0.23
谁能告诉我如何在 C# 中做到这一点?
谢谢, 马赫什
【问题讨论】:
-
对于
-5.4,您期望0.4还是0.6? -
我知道这是一篇旧帖子,但您可能需要重新考虑您接受的答案。
我想从一个双精度值中获取十进制值。
例如:
23.456 -> 0.456
11.23 -> 0.23
谁能告诉我如何在 C# 中做到这一点?
谢谢, 马赫什
【问题讨论】:
-5.4,您期望0.4 还是0.6?
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) 返回大于小数点的整数。如果您希望对正数和负数使用不同的逻辑,可以使用这些。
【讨论】:
x - Math.Floor(x);
文本最多可包含 30 个字符
【讨论】:
这就是取模运算符 (%) 的用途。将第一个操作数除以第二个操作数时,它会为您提供余数。只需将您想要的小数除以 1。
例如:
decimal d = new Decimal(23.456);
d = d % 1;
// d = 0.456
[编辑]
在阅读了 Nellius 对我的帖子的评论后,我对其进行了测试。当使用双精度模运算符时,实际上返回 0.45599999999999952。我的回答其实是错误的。
[/编辑]
【讨论】:
我在计算偏移量时使用这种方法。
double numberToSplit = 4.012308d;
double decimalresult = numberToSplit - (int)numberToSplit; //4.012308 - 4 = 0.012308
【讨论】:
试试这个。
Dim numberToSplit As Double = 4.52121
Dim decimalresult As Double = numberToSplit - Convert.ToInt64(numberToSplit)
MsgBox(decimalresult)
【讨论】: