我想使用 vb.net 用小数执行基本计算。
Dim a As Single= 7200.5
Dim b As Single= 7150.3
Dim c As Single= a - b
'Expected result = 50.2
MsgBox(a.ToString + " - " + b.ToString + " = " + c.ToString.Trim)
'Produced result is: 50.2002
Dim single1 As Single
Dim single2 As Single
Dim single3 As Single
single1 = 425000
single2 = 352922.2
single3 = single1 - single2
'Expected result is: 72077.8
MsgBox(single3.ToString)
'Produced result is: 72077.81
Run Code Online (Sandbox Code Playgroud)
这么简单的计算,结果怎么会这么不准确呢?当我将数据类型更改为 时,问题解决了Decimal,但Decimal对象消耗了更多内存(16 字节)。是否有任何替代数据类型可用于执行具有准确结果的简单分数计算?
我有一个特定转换的有趣问题.当我尝试将字符串"0,3"或"0.3"根据值UICulture转换为Double值时,结果为0,29999999.我还没有找到解决方案,以便收到结果0,3.
转换后有什么方法可以获得相同的值吗?
VB或C#中"十进制"值的内部格式是什么?
我不知道这对我正在做的任何事都很重要,但这是其中一件很有趣的事情.比如,知道多少位和负数如何存储可能意味着当你看到一个负数出现在你预期的正面时,你可以立刻想到,"啊,有一个溢出",而不是被深深的黑暗奥秘困惑.
我试图比较两个Double变量Powershell.当变量超过2位数(不计算精度)时,相等测试意外失败.
我错过了一些明显的东西吗?
这是测试脚本输出:
PS C:\test> .\test.ps1
==========
TEST ONE
==========
Value of Double1: 336.1
Type of Double1: System.Double
-----
Value of Double2: 336.2
Type of Double2: System.Double
-----
Value of Double1+.1: 336.2
Type of Double1+.1: System.Double
-----
Does Double1 not equal Double2: True
Does Double1+.1 not equal Double2: True
==========
TEST TWO
==========
Value of Double3: 36.1
Type of Double3: System.Double
-----
Value of Double4: 36.2
Type of Double4: System.Double
-----
Value of Double3+.1: 36.2
Type …Run Code Online (Sandbox Code Playgroud) 我正在尝试将XML字符串解析为列表,结果计数始终为零.
string result = "";
string address = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml";
// Create the web request
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Read the whole contents and return as a string
result = reader.ReadToEnd();
}
XDocument doc = XDocument.Parse(result);
var ListCurr = doc.Descendants("Cube").Select(curr => new CurrencyType()
{ Name = curr.Element("currency").Value, Value = float.Parse(curr.Element("rate").Value) }).ToList();
Run Code Online (Sandbox Code Playgroud)
哪里出错了
我使用小数类型进行高精度计算(货币)。
但我今天遇到了这个简单的划分:
1 / (1 / 37)这应该再次得到 37
http://www.wolframalpha.com/input/?i=1%2F+%281%2F37%29
但 C# 给了我:
37.000000000000000000000000037M
我尝试了这两个:
1m/(1m/37m);
和
Decimal.Divide(1, Decimal.Divide(1, 37))
但两者产生相同的结果。这种行为如何解释?
您好我现在正在使用C#和.NET Framework书进行计算,而我在其中一个练习中遇到了困难
编写C#程序进行更改.输入小于一美元的项目的成本.输出硬币作为更改,使用季度,硬币,镍币和硬币.尽可能使用最少的硬币.例如,如果该项目花费17美分,则变化将是四分之三,一个镍和三个便士
由于我还在尝试掌握c#编程,我提出的最佳方法是使用while循环.
while(costOfItem >= 0.50)
{
costOfItem -= 0.50;
fiftyPence++;
}
Run Code Online (Sandbox Code Playgroud)
我为每个笔20,10,5等都有这些.我正在检查金额是否大于或等于50便士,如果是这样,我从用户给出的金额减少50便士并加1 fiftypence变量.
然后它移动到下一个while循环,我对每个pences都有.问题是,沿着线路的某个环路消失,比如20便士,而costOfItem变成类似"0.1999999999999"的东西,然后它永远不会下降到0,它应该得到正确的变化量.
任何帮助表示赞赏,请不要建议我已经涵盖的复杂程序.
public static void Main()
{
Dictionary<string, double> values = new Dictionary<string, double>();
values.Add("a", 0.002);
values.Add("b", 0.003);
values.Add("c", 0.012);
// Summing iteratively.
double v1 = 615.0;
foreach (KeyValuePair<string, double> kp in values)
{
v1 += kp.Value;
}
Console.WriteLine(v1);
// Summing using the Sum method.
double v2 = 615.0;
v2 += values.Values.Sum();
Console.WriteLine(v2);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
当我看着它给人的615.01699999999994值调试器V1的价值,但对于V2它给人的615.017值.由于某种原因,Sum方法产生精确的结果,而迭代地对它们求和则不会.(当我打印这两个值时它们是相同的,但我认为这是由于WriteLine方法所做的一些舍入.)
有谁知道这里发生了什么?
好的,所以一个月前上课,秋季学期开始在3个星期内恢复.我想在书中做我们从未分配的作业.这个问题让我陷入困境,因为它在第二章中.它是一个给予改变的程序(92美分是编译时初始化).我的问题是......有没有什么方法可以使这个程序更"虚拟"而不是它.而且我还必须把(int)放在我对aQuarter,anDime等的分配之前.否则我之后会得到小数.这是为什么?有经验的程序员能解释一下吗?
另外,本章讨论了MOD,这就是我使用它的原因.这是在引入类方法之前,显然是在循环和数组之前.所以我不能使用任何这些工具.应该只是一个非常基本的"洞穴人"计划......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication273
{
class Program
{
static void Main(string[] args)
{
double change = 0.92;
double quarter = 0.25;
double dime = 0.10;
double nickel = 0.05;
double pennies = 0.01;
double anQuarter = (int)(change / quarter);
double anDime = (int)((change % quarter) / dime);
double anNickel = (int)(((change % quarter) % dime) / nickel);
double anPennies = (int)((((change % quarter) % dime) % nickel) / pennies);
Console.WriteLine("The amount of …Run Code Online (Sandbox Code Playgroud) 我在C#中使用双数字有一个奇怪的问题.这里的NET是我的测试:
double my_value = 0.49;
Run Code Online (Sandbox Code Playgroud)
问题是显示的变量值是0.48999999999999999我不需要显示0.49使用Math.Round()函数; 我需要准确存储这个值.
谢谢.
c# ×8
double ×4
.net ×2
vb.net ×2
addition ×1
c#-4.0 ×1
comparison ×1
decimal ×1
equals ×1
loops ×1
math ×1
powershell ×1
rounding ×1
types ×1
variables ×1
vb.net-2010 ×1
webrequest ×1
while-loop ×1
xml ×1