删除双精度中的最后一个十进制值

Delete last decimal value in a double

我正在用 C# 制作一个计算器。 我将用户的输入保存为双精度。

我使用以下代码删除带小数的双精度数中最后输入的数字。

i = (i - (i % 10)) / 10;

这将删除最后一个号码。

12345 将变为 1234


我想不通的是如何为十进制值实现这一点。

2134.765 必须变成 2134.76

我的程序使用 var 来查看是否输入了一个点,所以我只需要数学来删除最后一个数字。

最简单的方法可能是使用您自己的数字格式 - 无论如何您都希望将值保留为十进制。 double 是一个糟糕的选择。至少,使用 decimal 以便 保证 数字的十进制表示形式。

由于您正在处理 character 输入而不是 math,因此只需将您的输入保留为字符串 直到你需要对其执行操作。然后删除最后一个字符就像

一样简单
input = input.Substring(0,input.Length-1);

否则你必须处理模棱两可的情况,例如:

  • 如果最后一个字符是小数点怎么办?
  • 如果输入了一个或多个尾随零怎么办?
  • 是否输入了小数点(你说你已经跟踪过了)

如果你真的总是只想删除数字中的最后一位数字,我会使用一个技巧并将数字转换为字符串,删除最后一个字符并返回。

var number = 123,456;
var strNumber = number;
strNumber.Remove(strNumber.Length - 1);
number = double.parse(strNumber);