有没有直接的方法从c#(或一般的.NET)中获取双尾数和指数?
我发现这个使用谷歌的例子,但我不确定它会有多强大.二进制表示可以在框架的某些未来版本中进行双重更改吗?
我发现的另一个替代方法是使用System.Decimal而不是double,并使用Decimal.GetBits()方法来提取它们.
有什么建议?
我有三个双变量a,b和c
a = 0.000006
b = 6
c = a/b;
Run Code Online (Sandbox Code Playgroud)
所以C应该是0.000001
我想在文本框中显示这个值,所以我写了
textbox.text = c.tostring();
Run Code Online (Sandbox Code Playgroud)
但它的结果为"1E-06"..
任何人都可以帮助我如何在文本框中输入正确的值?
谢谢
我刚刚遇到了一个很棒的"功能",如果有足够的小数位,.NET 默认会Double.ToString()使用科学记数法.
.005.ToString() // ".005"
.00005.ToString() // "5E-05"
Run Code Online (Sandbox Code Playgroud)
有没有人知道一种有效的方法让它以标准(非科学)符号显示为字符串?
我已经看到了这个问题,但是前两个答案对我来说似乎有些苛刻,因为他们都做了Double.ToString(),然后只是重新格式化结果.
谢谢你的帮助.
编辑:
所需的输出:
.00005.ToString() == ".00005"
Run Code Online (Sandbox Code Playgroud)
EDIT2:
所有重复和结束投票是什么?我在问题中特别说,类似的问题没有令人满意的答案.这个网站上的人太高兴了.
我的解决方案
如果它对任何人都有用:
/// <summary>
/// Converts the double to a standard notation string.
/// </summary>
/// <param name="d">The double to convert.</param>
/// <returns>The double as a standard notation string.</returns>
public static String ToStandardNotationString(this double d)
{
//Keeps precision of double up to is maximum
return d.ToString(".#####################################################################################################################################################################################################################################################################################################################################");
}
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于值> 1.我还没有找到一种有效的方法来为所有值执行此操作.
如何将double转换为字符串而无需10次表示(E-05)
double value = 0.000099999999833333343;
string text = value.ToString();
Console.WriteLine(text); // 9,99999998333333E-05
Run Code Online (Sandbox Code Playgroud)
我想字符串文本是0.000099999999833333343(或者差不多,我不做火箭科学:)
我尝试过以下变种
Console.WriteLine(value.ToString()); // 9,99999998333333E-05
Console.WriteLine(value.ToString("R20")); // 9,9999999833333343E-05
Console.WriteLine(value.ToString("N20")); // 0,00009999999983333330
Console.WriteLine(String.Format("{0:F20}", value)); // 0,00009999999983333330
Run Code Online (Sandbox Code Playgroud)
做串扰N20或格式F20似乎最接近我想要的,但我最终得到了很多尾随零,是否有一种聪明的方法可以避免这种情况?我想尽可能接近双重表示0.000099999999833333343
找不到将double转换为字符串的简单方法.我需要转换大数而不失真.如:
double d = 11111111111111111111;
string s = d.ToString();
Console.WriteLine(s);
//1.11111111111111E+19
Run Code Online (Sandbox Code Playgroud)
如何从double值获取与用户输入完全相同的字符串值.
11111111111111111111111 => "11111111111111111111111"
1.111111111111111111111 => "1.111111111111111111111"
有什么想法可以做到吗?
I have a string like this:
var str = "{'data': {'someProperty': 0.00001}}";
Run Code Online (Sandbox Code Playgroud)
When I parse it to JObject like that
var jObject = JObject.Parse(str);
Run Code Online (Sandbox Code Playgroud)
My jObject looks like this:
{"data": {"someProperty": 1E-05}}
Run Code Online (Sandbox Code Playgroud)
I need to get rid of scientific notation so that resulting JObject would look like original json.
I managed to do that using later version of Newtonsoft.Json like that:
var serializer = new JsonSerializer { FloatParseHandling = FloatParseHandling.Decimal };
using (System.IO.TextReader tr = new System.IO.StringReader(str)
using (var jsonReader …Run Code Online (Sandbox Code Playgroud) 我有一个null的double值,它从数据库中获取值.它从数据库中检索值为'1E-08'.我想显示没有科学通知的值(0.00000001)
我使用了以下代码.
double? valueFromDB=1E-08;
string doubleValue=valueFromDB.Value.Value.ToString();
string formatedString=String.Format("{0:N30}", doubleValue);
Run Code Online (Sandbox Code Playgroud)
但是formatedString的值仍然是1E-08.
请考虑以下代码:
var rateUsed = 0.00000001;
var rateUsedConvertToString = Convert.ToString(rateUsed);
var rateUsedToString = rateUsed.ToString();
Run Code Online (Sandbox Code Playgroud)
而不是我的字符串是"0.00000001",它们都是"1E-08".我无法控制rateUsed的初始类型,它是一个double,我想要double的精确字符串表示.
为什么会发生这种情况,如果以双重值开始,如何将0.00000001作为字符串?
我目前正在为我的计算机科学模块编写一个项目,但是如果 double 值中有太多小数位,我的字符串值会默认为科学记数法的问题。
我试着显而易见的解决方案ostringstream,并.str()却使得它变成符号。我必须编译到 C++98 标准,所以我不能使用像std::to_string.
我需要将值转换为字符串,但它需要保持其格式。任何帮助,将不胜感激。
我有这个程序,从双变量中获取所有数字,删除小数点和减号,并分别添加每个数字.这是:
static void Main(string[] args)
{
double input = double.Parse(Console.ReadLine());
char[] chrArr = input.ToString().ToCharArray();
input = 0;
foreach (var ch in chrArr)
{
string somestring = Convert.ToString(ch);
int someint = 0;
bool z = int.TryParse(somestring, out someint);
if (z == true)
{
input += (ch - '0');
}
}
Run Code Online (Sandbox Code Playgroud)
The problem is for example when I enter "9999999999999999999999999999999...." and so on, it gets represented as 1.0E+254 and what so my program just adds 1+0+2+5+4 and finishes. Is there efficient way …