首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Decimal.TryParse -缺少分隔符?

Decimal.TryParse -缺少分隔符?
EN

Stack Overflow用户
提问于 2015-01-15 20:54:51
回答 2查看 1.2K关注 0票数 0

当我使用API时,我遇到了奇怪的情况。我在JSON中获得对象,并将其反序列化。此对象包含字符串属性,该属性被解析为十进制。

为了做到这一点,我使用了以下代码。我住在波兰,十进制分隔符是',',所以我使用替换方法。

代码语言:javascript
运行
复制
string input ="160.00"; //value from API

decimal result;
decimal.TryParse(input.Replace('.',','), out result);

有时我的结果是等于16000!!(我认为TryParse方法删除分隔符,但未确定)。我怎样才能防止这种情况发生?我能分析一下吗

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-15 21:05:23

无论如何,数字应该序列化为InvariantCulture,所以用于解析的InvariantCulture是一个很好的开始。还应检查序列化数字的代码是否遵循此规则。

代码语言:javascript
运行
复制
string input ="160.00";
decimal result = decimal.Parse(
    input, 
    System.Globalization.CultureInfo.InvariantCulture);

不将数字序列化为区域性不变是最常见的问题之一,就像它在我的机器上运行--我不知道为什么它不在您的机器上.哦,你说你的系统是在另一种语言中运行的;-)

票数 6
EN

Stack Overflow用户

发布于 2015-01-15 20:59:18

您应该使用适当的TryParse方法重载,即decimal.TryParse(String, NumberStyles, IFormatProvider, Decimal),而不是替换小数点字符。

代码语言:javascript
运行
复制
string input ="160.00";
NumberStyles style = NumberStyles.Number;
decimal number = 0;

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
decimal.TryParse(input, style, culture, out number)

确保指定适合您的情况的正确的区域性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27972804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档