在对双精度变量进行模 1 后,如何修剪“0.”

本文关键字:何修剪 修剪 变量 双精度 | 更新日期: 2023-09-27 18:36:43

大家好,标题说我想修剪"0.",在我对双变量进行模 1

例:

double Number;
Number = Convert.ToDouble(Console.ReadLine());        //12.777
test = Number % 1;                                    //0.777

我希望我的输出是:777只使用数学而没有绳子修剪等等...

谢谢大家!!请在 C# 中

在对双精度变量进行模 1 后,如何修剪“0.”

这只是 ToString 上的一种格式。在此处查看您的所有选项

怎么样

.ToString(".###");

不使用任何字符串函数!

while(Math.Round(Number-(int)Number,1)!=1)
{
    Number=Number/0.1;
    if(Number-(int)Number==0)break;//To cover edge case like 0.1 or 0.9
}

注意:数字应为double类型!

如果我从字面上理解你的问题,那么你也不想要小数点,所以.ToString(".###")不会得到你想要的,除非你删除第一个字符(这是字符串操作,你说你也不想要)。

如果你想777数字变量(不是字符串),那么你可以将结果乘以 1000,尽管我不知道你是否总是在小数点后有 3 位数字。

最简单的方法就是使用字符串操作。 ToString没有任何格式的结果,然后让子字符串从小数点开始。例如:

var x = (.777d).ToString();
var result = x.SubString(x.IndexOf('.') + 1);

你肯定在寻找这个:-

.ToString(".###");

正如 Marc 在注释中正确指出的那样,您应该将所有内容都放在一个字符串中,因为如果您输出 0.777,因为它确实存储在内部,您将获得 8 个随机字节。

像这样的东西:-

var num = (.777d).ToString();
var result = num.SubString(num.IndexOf('.') + 1);

最通用的方法是:

using System.Globalization;

var provider = NumberFormatInfo.InvariantInfo;
var output = test.ToString(".###", provider)
             .Replace(provider.NumberDecimalSeparator, String.Empty);

您也可以在自定义NumberFormatInfo上设置NumberDecimalSeparator,但如果将其设置为空,则会引发异常"小数分隔符不能为空字符串"。