2

大家好,标题说我要修剪“0”。在我对双变量进行模1之后

例子:

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

我希望我的输出是:777 只使用没有字符串修剪的数学,所以......

谢谢你们 !!请在 c# 中

4

5 回答 5

2

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

怎么样

.ToString(".###");
于 2013-10-24T17:47:04.547 回答
2

Without using any string functions!

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
}

NOTE: Number should be of double type!

于 2013-10-24T18:19:29.920 回答
1

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

如果您想要777一个数字变量(不是字符串),那么您可以将结果乘以 1000,但我不知道您是否总是在小数点后精确地保留 3 位数字。

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

var x = (.777d).ToString();
var result = x.SubString(x.IndexOf('.') + 1);
于 2013-10-24T17:56:04.553 回答
0

你肯定在寻找这个:-

.ToString(".###");

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

像这样的东西: -

var num = (.777d).ToString();
var result = num.SubString(num.IndexOf('.') + 1);
于 2013-10-24T17:48:35.267 回答
0

最通用的方法是:

using System.Globalization;


var provider = NumberFormatInfo.InvariantInfo;

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

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

于 2013-10-25T13:27:33.200 回答