在对双精度变量进行模 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# 中
这只是 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
,但如果将其设置为空,则会引发异常"小数分隔符不能为空字符串"。