在Python中,我如何解析数字字符串,如"545.2222"相应的浮点值,545.2222?或者将字符串解析为"31"整数,31?
我只是想知道如何将一个浮点数 解析str为a float,并且(单独)将一个int 解析str为一个int.
我很好奇money数据类型和类似之间是否存在真正的差异decimal(19,4)(我认为这是内部使用的钱).
我知道这money是特定于SQL Server的.我想知道是否有令人信服的理由选择一个而不是另一个; 大多数SQL Server示例(例如AdventureWorks数据库)使用money而不是decimal价格信息之类的东西.
我应该继续使用money数据类型,还是使用十进制代替?Money输入的字符较少,但这不是有效的原因:)
我正在使用十进制列来存储数据库中的货币值,而今天我想知道要使用的精度和规模.
因为据说固定宽度的char列效率更高,我认为对于十进制列也是如此.是吗?
我应该使用什么精度和规模?我正在考虑精确24/8.这有点矫枉过正,还不够或没问题?
这就是我决定做的事情:
DECIMAL(19,4)我不认为转换率的浮点数是一个问题,因为它主要用于参考,我将把它转换为十进制.
谢谢大家的宝贵意见.
我刚刚重新阅读Python 3.0中的新功能,它指出:
round()函数舍入策略和返回类型已更改.确切的中途情况现在四舍五入到最接近的偶数结果而不是零.(例如,round(2.5)现在返回2而不是3.)
和圆形文件:
对于支持round()的内置类型,值被舍入到10的最接近的倍数到幂减去n; 如果两个倍数相等,则向均匀选择进行舍入
所以,在v2.7.3下:
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
Run Code Online (Sandbox Code Playgroud)
正如我所料.但是,现在在v3.2.3下:
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Run Code Online (Sandbox Code Playgroud)
这似乎是违反直觉的,与我对四舍五入的理解相反(并且必然会绊倒人).英语不是我的母语,但在我读到这篇文章之前,我以为我知道舍入的含义是什么: - /我确信在引入v3的时候一定有一些关于这个的讨论,但是我无法找到一个很好的理由我的搜索.
我在这里错过了什么?
更新:@ Li-aungYip的评论"银行家的舍入"给了我正确的搜索词/搜索关键字,我发现了这个问题:为什么.NET使用银行家的舍入作为默认值?所以我会仔细阅读.
在我们的代码中,我们有一个我们需要转换为int的double.
double score = 8.6;
int i1 = Convert.ToInt32(score);
int i2 = (int)score;
Run Code Online (Sandbox Code Playgroud)
谁能解释我为什么i1 != i2?
我得到的结果是:i1 = 9和i2 = 8.
这是我的代码:
\nusing static System.Console;\n\nnamespace ConsoleApp2\n{\n internal class Program\n {\n static void Main(string[] args)\n {\n double[] doubles = new[] { 9.05, 9.15, 9.25, 9.35, 9.45, 9.55, 9.65, 9.75, 9.85, 9.95 };\n foreach (double n in doubles)\n {\n WriteLine("{0} ===> {1:F1}", n, n);\n }\n\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n输出.NET Framework 4.7.2:
9.05 ===> 9.1\n9.15 ===> 9.2\n9.25 ===> 9.3\n9.35 ===> 9.4\n9.45 ===> 9.5\n9.55 ===> 9.6\n9.65 ===> 9.7\n9.75 ===> 9.8\n9.85 ===> 9.9\n9.95 ===> 10.0\nRun Code Online (Sandbox Code Playgroud)\n输出.NET 6(使用相同的代码):
9.05 …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何将数字四舍五入到C#中的两位小数?
我感兴趣的是如何将变量舍入到两位小数.在下面的示例中,奖金通常是带小数点后四位的数字.有没有办法确保薪酬变量总是四舍五入到小数点后两位?
pay = 200 + bonus;
Console.WriteLine(pay);
Run Code Online (Sandbox Code Playgroud) 我一直在使用来自SQL Decimal(38,30)的C#中的十进制精度,我终于把它变成了一个舍入奇怪的东西.我知道我可能会忽视这里显而易见的事情,但我需要一点见解.
我遇到的问题是C#没有产生我认为是一致输出的东西.
decimal a = 0.387518769125m;
decimal b = 0.3875187691250002636113061835m;
Console.WriteLine(Math.Round(a, 11));
Console.WriteLine(Math.Round(b, 11));
Console.WriteLine(Math.Round(a, 11) == Math.Round(b, 11));
Run Code Online (Sandbox Code Playgroud)
产量
0.38751876912
0.38751876913
False
Run Code Online (Sandbox Code Playgroud)
嗯,0.38751876913?真?我在这里错过了什么?
来自MSDN:
如果小数位的数字是奇数,则将其更改为偶数.否则,它保持不变.
为什么我看到不一致的结果?额外的精度不会改变'小数位数'......
以下适用:
var rounded = Decimal.Round(7.635m, 2);
//rounded: 7.63
Run Code Online (Sandbox Code Playgroud)
对我来说,这是错误和意想不到的行为.我假设的价值圆是7.64.
要做到这一点,我可以这样做:
var rounded = Decimal.Round(7.635m, 2, MidpointRounding.AwayFromZero);
//rounded: 7.64
Run Code Online (Sandbox Code Playgroud)
这怎么可能不是默认行为Decimal.Round?有什么好理由吗?